3 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
不要逃避反斜杠; 你會(huì)迷惑自己。s在文本中沒(méi)有出現(xiàn)的命令后使用不同的符號(hào)(我%在下面的示例中使用):
line_old='myparam /path/to/a argB=/path/to/B xo'
line_new='myparam /path/to/c argB=/path/to/D xo'
sed -i "s%$line_old%$line_new%g" /etc/myconfig
另外,用雙引號(hào)括起整個(gè)字符串; 使用單引號(hào)意味著sed看到$line(在原始中)而不是擴(kuò)展值。在單引號(hào)內(nèi),沒(méi)有擴(kuò)展,也沒(méi)有元字符。如果您的文本幾乎可以包含任何純文本字符,請(qǐng)使用控制字符(例如control-A或control-G)作為分隔符。
請(qǐng)注意,-i這里的使用反映了問(wèn)題中的內(nèi)容,但假定使用GNU sed。BSD sed(在Mac OS X上也可以找到)需要后綴。你可以用sed -i '' …原位替換; 這與GNU不兼容sed。要在兩者之間攜帶,請(qǐng)使用-i.bak; 這將適用于兩者 - 但為您提供了一個(gè)您可能想要?jiǎng)h除的備份文件。其他Unix平臺(tái)(例如AIX,HP-UX,Solaris)可能具有sed根本不支持的變體-i。POSIX規(guī)范不要求它sed。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
-e
除非你有多個(gè)表達(dá)式(sed -e 's/a/b/' -b 's/xy/ZZ/g'
) - AFAIK,否則它是可選的。使用sed -i -e …
會(huì)使腳本在GNU sed
和BSD 之間“可移植” sed
,代價(jià)是讓BSD sed
創(chuàng)建帶擴(kuò)展名的備份文件-e
(因此,如果你編輯文件data
,Mac OS X上的備份文件將是data-e
; GNU sed
將不會(huì)創(chuàng)建備份)。我不確定這是否足夠理由以這種方式做事; 最好使用-i.bak
和刪除備份 - 這適用于兩種變體。
添加回答
舉報(bào)