このように多くの行を含むファイルがあります。
, 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
フラグは拡張正規表現を有効にして、(){}|
エスケープなしでメタ文字を使用できるようにします。
(, ){,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
各フラグに1つずつ)があります。