
我有一個包含很多行的文件,就像這樣
, 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
-E
flag 啟動擴充正規表示式,允許使用(){}|
元字元而無需轉義。
(, ){,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
標誌一個)。