使用包含方括号的 xml 中的 sed 或 awk 替换 IP
Substitute IP using sed or awk from xml which contains square brakets
我有这段代码想更改 IP 来自:
<mailHost>[10.237.30.150]:25</mailHost>
我需要换个IP:
预期结果:
<mailHost>[10.237.30.151]:25</mailHost>
这是我尝试过的方法,但仍然报错并且没有任何改变。
sed -n "/<mailHost>/ {s/10.237.30.150/10.237.30.151/}" file
非常欢迎任何提示:)
谢谢。
以下 awk
可能会对您有所帮助。
awk -v value="new_value" '/mailHost/{match([=10=],/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/);val=substr([=10=],RSTART,RLENGTH);if(val){print substr([=10=],1,RSTART-1) value substr([=10=],RSTART+RLENGTH);next}} 1' Input_file
如果您想对 Input_file 本身进行更改,请在上面的命令 > temp_file && mv temp_file Input_file
.
中添加以下内容
现在也添加一个非单行形式的解释。
awk -v value="new_value" '
/mailHost/{
match([=11=],/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/);
val=substr([=11=],RSTART,RLENGTH);
if(val){
print substr([=11=],1,RSTART-1) value substr([=11=],RSTART+RLENGTH);
next}
}
1' Input_file
sed -i "s/10.237.30.150/10.237.30.151/g" file
这不行吗?
您的问题不明确(您是要替换出现在任何地方的任何 IP,还是仅替换该特定 IP 或仅在该上下文中的特定 IP 或该上下文中的任何 IP 或其他内容?)但是这个 可能是你想要的:
$ sed 's/\(<mailHost>\[\)[^]]*/0.237.30.151/' file
<mailHost>[10.237.30.151]:25</mailHost>
我有这段代码想更改 IP 来自:
<mailHost>[10.237.30.150]:25</mailHost>
我需要换个IP: 预期结果:
<mailHost>[10.237.30.151]:25</mailHost>
这是我尝试过的方法,但仍然报错并且没有任何改变。
sed -n "/<mailHost>/ {s/10.237.30.150/10.237.30.151/}" file
非常欢迎任何提示:) 谢谢。
以下 awk
可能会对您有所帮助。
awk -v value="new_value" '/mailHost/{match([=10=],/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/);val=substr([=10=],RSTART,RLENGTH);if(val){print substr([=10=],1,RSTART-1) value substr([=10=],RSTART+RLENGTH);next}} 1' Input_file
如果您想对 Input_file 本身进行更改,请在上面的命令 > temp_file && mv temp_file Input_file
.
现在也添加一个非单行形式的解释。
awk -v value="new_value" '
/mailHost/{
match([=11=],/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/);
val=substr([=11=],RSTART,RLENGTH);
if(val){
print substr([=11=],1,RSTART-1) value substr([=11=],RSTART+RLENGTH);
next}
}
1' Input_file
sed -i "s/10.237.30.150/10.237.30.151/g" file
这不行吗?
您的问题不明确(您是要替换出现在任何地方的任何 IP,还是仅替换该特定 IP 或仅在该上下文中的特定 IP 或该上下文中的任何 IP 或其他内容?)但是这个 可能是你想要的:
$ sed 's/\(<mailHost>\[\)[^]]*/0.237.30.151/' file
<mailHost>[10.237.30.151]:25</mailHost>