2014-09-02 86 views
6

我試圖使用SED插入文本文件中的第三行,而且我在其他論壇中發現的語法是:SED插入命令行的OSX

sed -i '' "3i\ text to insert" file 

當我使用這個然而,我得到一個錯誤:

sed: 1: "3i\ text to insert": extra characters after \ at the end of i command 

我似乎無法弄清楚是什麼導致了問題。我使用OSX,這就是爲什麼我有一個空的''作爲我的擴展。

謝謝!

回答

19

您應該\後直接放一個換行符:

sed '3i\ 
text to insert' file 

這實際上是由POSIX specification定義的行爲。 GNU sed允許你指定要在同一行插入的文本是一個擴展。

+3

我想給一個額外+1指出的是,「在'3i'位之後插入的文本」是GNU擴展(但我​​只能給其中的一個)。 – 2014-09-02 20:48:52

+0

@JonathanLeffler我會代你向他頒發其他+1 :-) – 2014-09-02 21:11:56

6

在OSX你可以使用:

sed -i.bak '3i\ 
text to insert 
' file 
1

這裏是如何做到這一點的一個行語法

sed -i '' -e "2s/^//p; 2s/^.*/text to insert/" file 
  • 重複第二行:2s/^//p;

  • 與您的文本替換新行:2s/^.*/text to insert/

0

該作品對我來說

sed -i '' '3i\ 
text to insert' file 
0

如果您想要修改特定文件類型(在我的情況下是.sh)的文件,請使用此命令。

sed -i '.sh' '3i\ 
mymodified text to insert' temp.sh 

請確保您有後斜槓(「\」),換行符