[問題] sed指令改寫成一行後不能執行

看板Linux作者 (QQ)時間11月前 (2023/12/28 15:25), 編輯推噓6(6012)
留言18則, 8人參與, 1年前最新討論串1/1
原本書上有一個sed指令是這樣的 sed '/LIST/{ r data11.txt d }' notice.std 改寫成一行之後就不能執行了 sed '/LIST/{r data11.txt;d}' notice.std 錯誤訊息: sed: -e expression #1, char 0: unmatched `{' 請問要怎麼改才可以正確執行,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.187.32 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1703748341.A.BD2.html

12/28 15:33, 11月前 , 1F
d;
12/28 15:33, 1F

12/28 22:03, 11月前 , 2F
sed '/LIST/{r data11.txt' -e 'd;}' notice.std
12/28 22:03, 2F

12/29 11:09, 11月前 , 3F
還是不行
12/29 11:09, 3F

12/29 11:10, 11月前 , 4F
sed: -e expression #1, char 3: unexpected `}'
12/29 11:10, 4F

12/29 12:12, 11月前 , 5F
sed -e '/LIST/{r data11.txt' -e 'd;}' notice.std
12/29 12:12, 5F

12/29 12:13, 11月前 , 6F
因為 r 會把後面所有的內容當成文件名稱,以單引號或換行
12/29 12:13, 6F

12/29 12:14, 11月前 , 7F
為依據。這表示 data11.txt;d} 被當作文件名稱,所以左側的
12/29 12:14, 7F

12/29 12:15, 11月前 , 8F
{ 吃不到右側的 } 被認為沒有閉合,二樓的解法是對的,只是
12/29 12:15, 8F

12/29 12:15, 11月前 , 9F
漏掉了一個 -e 讓他不知道前面被單引號包住的也是表達式
12/29 12:15, 9F

12/29 23:00, 11月前 , 10F
sed 這真的不是設計錯誤嗎……
12/29 23:00, 10F

12/30 01:30, 11月前 , 11F
首先 樓上要先確定你是在講gnu sex還是bsd sed畢竟 開
12/30 01:30, 11F

12/30 01:30, 11月前 , 12F
發團隊/程式原始碼完全不同
12/30 01:30, 12F

12/30 01:31, 11月前 , 13F
*sed
12/30 01:31, 13F

12/31 03:00, 10月前 , 14F
請問會避不掉單行的情況嗎?否則就不要用單行啊XD
12/31 03:00, 14F

12/31 23:42, 10月前 , 15F
sed -e '/LIST/r data11.txt' -e '/LIST/d' notice.s
12/31 23:42, 15F

12/31 23:43, 10月前 , 16F
td
12/31 23:43, 16F

01/25 00:11, 1年前 , 17F
sed '/LIST/{r data11.txt
01/25 00:11, 17F

01/25 00:11, 1年前 , 18F
d;}' notice.std
01/25 00:11, 18F
文章代碼(AID): #1bZIBrlI (Linux)
文章代碼(AID): #1bZIBrlI (Linux)