Tes*_*tix 1 sed regular-expression whitespace
我必须修改参数文件中的一些参数,可能如下所示:
MY_VAR=YES
Run Code Online (Sandbox Code Playgroud)
我想使用`sed并想出了这个:
sed -i 's/MY_VAR=[A-Z]*/MY_VAR=NO/' sed.txt这似乎有效,现在我也希望它匹配,如果文件看起来像
MY_VAR = YES
Run Code Online (Sandbox Code Playgroud)
或任何其他空白格式,我该怎么做?我尝试过sed -i 's/MY_VAR\s=\s[A-Z]*/MY_VAR=NO/' sed.txt,但没有成功。我该如何正确地做到这一点?
似乎您需要匹配的唯一空格是变量名和等号之间的空格。等号后面的内容无论如何都会被替换。
使用标准sed:
sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt
Run Code Online (Sandbox Code Playgroud)
子[[:blank:]]*表达式将匹配零个或多个空白字符。“空白字符”是制表符或空格。替换将以变量名称开头、后跟可选空格和 a 的整行替换=为变量名称和字符串=NO。
测试:
$ cat params.txt
MY_VAR=YES
MY_VAR = MAYBE
MY_VAR = OK
Run Code Online (Sandbox Code Playgroud)
$ sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt
MY_VAR=NO
MY_VAR=NO
MY_VAR=NO
Run Code Online (Sandbox Code Playgroud)
对于文件的就地编辑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
Run Code Online (Sandbox Code Playgroud)