幫助組合 sed 指令(語法)

幫助組合 sed 指令(語法)

我有一個包含很多行的文件,就像這樣

, foo = $true
, foo = $false
foo = $true, <--- single space after comma
foo = $false, <-- single space after comma

要替換這些字串我可以做

#!/bin/bash

sed -i 's/, foo = $true/bar/g' file
sed -i 's/, foo = $false/bar/g' file
sed -i 's/foo = $true, /bar/g' file
sed -i 's/foo = $false, /bar/g' file

或者,把它們拴起來,這同樣糟糕

sed -i -e 's/, foo = $true/bar/g' -e 's/, foo = $false/bar/g' -e 's/foo = $true, /bar/g' ... file

但是有沒有辦法使用單一 sed 指令來執行所有迭代?

sed -i 's/[,\ ].*foo = [$false\|$true][,\ ]/bar/g' file

答案1

sed -Ei 's/,{,1} {,1}foo = \$(true|false),{,1} {,1}/bar/g' file
sed -Ei 's/(, ){,1}foo = \$(true|false)(, ){,1}/bar/g' file

-Eflag 啟動擴充正規表示式,允許使用(){}|元字元而無需轉義。

  • (, ){,1}配對 0(隱含)到 1 次出現,

  • \$(true|false)匹配$true$false.


請記住

sed -i -e 's/, foo = $true/bar/g' -e 's/, foo = $false/bar/g' -e 's/foo = $true, /bar/g' ... file

是一個 sed 命令,但具有各種腳本(每個-e標誌一個)。

相關內容