Linux
sed 中帶有 xargs 輸入的多個命令
我有一個文件
./123bar/foo.txt
:pro := text ver := 1.0 rev := 2
和兩個環境變數:
var =2.1 var2=3
我想
ver
用$var
和rev
替換所有$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"
‘-e SCRIPT’
‘–expression=SCRIPT’
將 SCRIPT 中的命令添加到要在處理輸入時執行的命令集中。
-E
用於使用擴展的正則表達式。