sed忽略以regex开头的行

sed忽略以regex开头的行,sed,Sed,我试图在shell脚本中使用sed替换属性文件上的属性;下面列出的命令工作得非常好 sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 问题-这家伙也替换了评论中匹配的“键” 示例文件: ########### #ws.clients=http://abc123.com ws.clients=http://123.com ########### 脚本: #!/bin/ksh KEY="ws.clients" NEWVAL="http

我试图在shell脚本中使用sed替换属性文件上的属性;下面列出的命令工作得非常好

sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
问题-这家伙也替换了评论中匹配的“键”

示例文件:

###########
#ws.clients=http://abc123.com
ws.clients=http://123.com
###########
脚本:

#!/bin/ksh
KEY="ws.clients"
NEWVAL="http://abcd.com"
sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
输出:

###########
#ws.clients=http://abcd.com
ws.clients=http://abcd.com
###########

我尝试了几种方法,但都没有成功地摆脱以“#”开头的界线。。。建议?

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

sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
/^[^#]/
读作“除了行首的磅符号以外的所有符号”。

您可以这样做

sed "s!^${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
刚刚添加了
^
,以便只有从行开头开始的匹配。远高于ans也应该可以工作,但如果您的行以
空格开头
,则会出现同样的问题