sed忽略以regex开头的行
我试图在shell脚本中使用sed替换属性文件上的属性;下面列出的命令工作得非常好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
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也应该可以工作,但如果您的行以空格开头
,则会出现同样的问题