簡體   English   中英

sed 插入行命令 OSX

[英]sed insert line command OSX

我正在嘗試使用 sed 將文本插入文件的第三行,我在其他論壇上找到的語法是:

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

但是,當我使用它時,出現錯誤:

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

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

謝謝!

您應該在\\之后直接放置一個換行符:

sed '3i\
text to insert' file

這實際上是POSIX 規范定義的行為。 GNU sed 允許您指定要在同一行插入的文本這一事實是一個擴展。


如果出於某種原因您需要在 sed 命令周圍使用雙引號,那么您必須在第一行的末尾轉義反斜杠:

sed "3i\\
text to insert" file

這是因為雙引號字符串首先由 shell 處理,然后\\后跟一個換行符被刪除:

$ echo "abc\
def"
abcdef

在 OSX 上,您可以使用:

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

以下是如何用一行語法做到這一點

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

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

使用 ANSI-C 引用的 OSX 單行:

sed -i '' '3i\'$'\n''text to insert' file

改編自https://stackoverflow.com/a/24299845/901597

這對我有用

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

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

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

確保在斜杠(“\\”)后有換行符

我發現我必須在要插入的行的末尾插入一個 \\ ,否則它會在原始行的開頭連接它。 所以,如果我想插入一個新的第三行,...

sed -i '' '3i\<br>
New line to be inserted.\<br>
' file

在 macOS 上使用 sed 將文本插入第一行並將其余部分放在新行上,這對我有用

sed -i '' '1 i \
Insert
' ~/Downloads/File-path.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM