我正在尝试编写一个sed脚本来替换一行的一部分,但仅限于没有“$”符号的行。
例如,该文件可能看起来像
host=$myvar
param1=val1
param2=val2
host=abc
host=def
我想用“host = zzzzz”替换“host = abc”和“host = def”,并忽略“host = $ myvar”。所以最终输出应该如下:
host=$myvar
param1=val1
param2=val2
host=zzzzz
host=zzzzz
我尝试了一些正则表达式,但它们没有用。
答案 0 :(得分:1)
这是使用模式地址的一种方式:
sed '/\$/!s/^\(host=\).*/\1zzzz/' file
结果:
host=$myvar
param1=val1
param2=val2
host=zzzz
host=zzzz
答案 1 :(得分:0)
使用此正则表达式:
^host=([^\$].*?)$
/m
或逐行浏览。它使用^
和$
来表示行的开头/结尾[^\$]
要求的字符与$
以下是一个实例:https://regex101.com/r/8w6er9/2
如果你不能逐行浏览,你也可以使用这个正则表达式:
(?:^|\r?\n)host=([^\$].*?)(?:\r?\n|$)
答案 2 :(得分:0)
您可以使用此16
命令:
sed
sed -E 's/^(host=)[^$]+$/\1zzzzz/' file
host=$myvar
param1=val1
param2=val2
host=zzzzz
host=zzzzz
是一个否定的字符类,匹配任何不是[^$]+
的字符中的一个或多个