我正在尝试使用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
###########
我尝试了几种方法但是没有成功地从“#”开始逃避这条线......建议?
答案 0 :(得分:5)
您可以为替换表达式添加条件:
sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
/^[^#]/
读作“所有但在行首处的井号”。
答案 1 :(得分:0)
你可以这样做
sed "s!^${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
刚刚添加了^
,只有从行开头开始匹配。在ans之上也应该有效但如果你的行以space
开头,则会出现同样的问题。