sed 可能なスペースマッチ

sed 可能なスペースマッチ

パラメーター・ファイルの一部のパラメーターを以下のように変更する必要があります。

MY_VAR=YES

私は `sed を使いたかったと思いました:

sed -i 's/MY_VAR=[A-Z]*/MY_VAR=NO/' sed.txtこれはうまくいくようです。さて、ファイルが次のような場合は一致させるようにしたいと思います。

MY_VAR = YES

または他の空の形式の場合はどうすればよいですか?試してみましたがsed -i 's/MY_VAR\s=\s[A-Z]*/MY_VAR=NO/' sed.txt成功しませんでした。これを正しく行うにはどうすればよいですか?

ベストアンサー1

君の唯一の空白だと思う必要一致するのは、変数名と等号の間の内容です。とにかく等号の後ろの内容はすべて置き換えられます。

使用標準sed:

sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt

サブ式は、[[:blank:]]*ゼロ個以上の空白文字と一致します。 「空白文字」はタブ文字または空白です。置換は変数名で始まり、その後にオプションのスペースとaが続く行全体を=変数名と文字列に置き換えます=NO

テスト:

$ cat params.txt
MY_VAR=YES
MY_VAR = MAYBE
MY_VAR  =       OK
$ sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt
MY_VAR=NO
MY_VAR=NO
MY_VAR=NO

ファイルを内部編集するには、params.txt使用している項目-iに応じて適切なファイルを使用してください(参照sedsed -i(所定の位置で編集)を使用して移植性を達成するには?)または使用

cp params.txt params.txt.tmp &&
sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt.tmp >params.txt &&
rm -f params.txt.tmp

おすすめ記事