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

时间:2012-03-20 02:48:23

标签: sed

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

sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

问题 - 这个人也会在评论中替换匹配的“KEY”。

示例文件:

###########
#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
###########

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

2 个答案:

答案 0 :(得分:5)

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

sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

/^[^#]/读作“所有在行首处的井号”。

答案 1 :(得分:0)

你可以这样做

sed "s!^${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

刚刚添加了^,只有从行开头开始匹配。在ans之上也应该有效但如果你的行以space开头,则会出现同样的问题。