Linux

sed 中帶有 xargs 輸入的多個命令

  • March 13, 2018

我有一個文件./123bar/foo.txt

pro := text
ver := 1.0
rev := 2

和兩個環境變數:

var =2.1
var2=3

我想ver$varrev替換所有$var2。預期輸出:

pro := text
ver := 2.1
rev := 3

我在下面嘗試首先找到所有文件,find然後grep將其傳遞給以sed實現結果。下面是我正在執行的命令:

find . -name 'foo.txt' | grep -P "\/[0-9]{3}bar" | xargs -I{} sed -E "s/:= *[0-9]+\.[0-9]+ *$/:= $var/g" -E "s/:= [0-9]+ *$/:= $var2/g" {}

它不起作用並給我錯誤:

sed: can't read s/:= [0-9]+ *$/:= 3/g: No such file or directory
pro := text
ver := 2.1
rev := 45

我如何解決它?也歡迎使用更簡潔/更簡單的解決方案。

在 sed 中使用多個表達式的選項是-e,而不是-E

sed -e "s/:= *[0-9]+\.[0-9]+ *$/:= $var/g" -e "s/:= [0-9]+ *$/:= $var2/g"

手冊中(假設 GNU 給出了linux標籤):

‘-e SCRIPT’

‘–expression=SCRIPT’

將 SCRIPT 中的命令添加到要在處理輸入時執行的命令集中。

-E用於使用擴展的正則表達式。

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