パラメーター・ファイルの一部のパラメーターを以下のように変更する必要があります。
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
に応じて適切なファイルを使用してください(参照sed
sed -i(所定の位置で編集)を使用して移植性を達成するには?)または使用
cp params.txt params.txt.tmp &&
sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt.tmp >params.txt &&
rm -f params.txt.tmp
答え2
にワイルドカードを追加すると、\s
ゼロ個以上のスペースが含まれます。あなたのコマンドは次のとおりです
sed -i 's/MY_VAR\s*=\s*[A-Z]*/MY_VAR=NO/' sed.txt