Sed

sed 可能的空白匹配

  • June 10, 2021

我必須修改參數文件中的一些參數,這些參數可能如下所示:

MY_VAR=YES

我想使用`sed並想出了這個:

sed -i 's/MY_VAR=[A-Z]*/MY_VAR=NO/' sed.txtwhih 似乎工作,現在我也希望它匹配如果文件看起來像

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

引用自:https://unix.stackexchange.com/questions/653746