Sed
sed 可能的空白匹配
我必須修改參數文件中的一些參數,這些參數可能如下所示:
MY_VAR=YES
我想使用`sed並想出了這個:
sed -i 's/MY_VAR=[A-Z]*/MY_VAR=NO/' sed.txt
whih 似乎工作,現在我也希望它匹配如果文件看起來像MY_VAR = YES
或任何其他空白格式,我該怎麼做?我試過
sed -i 's/MY_VAR\s=\s[A-Z]*/MY_VAR=NO/' sed.txt
了,但沒有用。我該如何正確地做到這一點?
將萬用字元添加到
\s
. 這將覆蓋零個或多個空格。您的命令將是:sed -i 's/MY_VAR\s*=\s*[A-Z]*/MY_VAR=NO/' sed.txt
似乎您需要匹配的唯一空格是變數名和等號之間的空格。無論如何,等號之後的任何內容都將被替換。
使用標準
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