sed忽略以正则表达式开头的行

sid*_*sid 4 sed

我试图在shell脚本中使用sed替换属性文件中的属性; 下面列出的命令完全正常

sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
Run Code Online (Sandbox Code Playgroud)

问题 - 这个人也会在评论中替换匹配的"KEY".

示例文件:

###########
#ws.clients=http://abc123.com
ws.clients=http://123.com
###########
Run Code Online (Sandbox Code Playgroud)

脚本:

#!/bin/ksh
KEY="ws.clients"
NEWVAL="http://abcd.com"
sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
Run Code Online (Sandbox Code Playgroud)

输出:

###########
#ws.clients=http://abcd.com
ws.clients=http://abcd.com
###########
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法但是没有成功地从"#"......建议开始逃避这条线路?

Edu*_*nec 5

您可以为替换表达式添加条件:

sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
Run Code Online (Sandbox Code Playgroud)

/^[^#]/读作" 在行首开始时只有一个符号的东西".