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根据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

相关内容