Shell

sed 與就地參數的多個表達式

  • June 2, 2020

我正在嘗試使用替換文件中的多個單詞

sed -i #expression1 #expression2

文件

Something  123 item1
Something  456 item2
Something  768 item3
Something  353 item4

輸出(所需)

anything  123 stuff1
anything  456 stuff2
anything  768 stuff3
anything  353 stuff4

試穿

sed -i我可以通過使用兩次得到以下輸出。

sed -i 's/Some/any/g' file
sed -i 's/item/stuff/g' file

我可以有任何可能的方法將其作為單個就地命令,例如

sed -i 's/Some/any/g' -i 's/item/stuff/g' file

當我嘗試上面的程式碼時,它會s/item/stuff/g作為一個文件並嘗試處理它。

根據sed您系統上的版本,您可以執行

sed -i 's/Some/any/; s/item/stuff/' file

您不需要此處命令g中最後一個斜杠之後的s內容,因為您每行只進行一次替換。

或者:

sed -i -e 's/Some/any/' -e 's/item/stuff/' file

或者:

sed -i '
 s/Some/any/
 s/item/stuff/' file

-i選項(一個 GNU 擴展現在被其他一些實現支持,儘管有些需要-i ''代替)告訴sed編輯文件;如果緊隨其後有字元,-ised備份原始文件並將這些字元用作備份文件的副檔名。例如,

sed -i.bak 's/Some/any/; s/item/stuff/' file

或者

sed -i'.bak' 's/Some/any/; s/item/stuff/' file

將修改file,保存原來的file.bak

當然,在 Unix(或類 Unix)系統上,我們通常使用 ‘~’ 而不是 ‘.bak’,所以

sed -i~ 's/Some/any/;s/item/stuff/' file

引用自:https://unix.stackexchange.com/questions/174609