sed替换符号>和<

时间:2015-09-21 16:38:44

标签: bash sed

我正在尝试删除>之间的字符。符号和<符号如下所示,并替换为IP地址8.8.8.8

<value name="CLIENTPREFIX">J_jRQtEolDEurgAVIwwwADXaZQs_</value>

我已尝试使用sed首先删除字符

 sed -i "/CLIENTPREFIX/s/\b>*.\b>//" name.sh

然后使用单独的命令添加IP地址

有人可以帮助将两个命令组合到一个命令中吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

您需要使用.*代替*.,而且正则表达式中的第二个符号是错误的,必须是<

sed "/CLIENTPREFIX/s/>[^<>]*</>$ip</g" file

$ echo '<value name="CLIENTPREFIX">J_jRQtEolDEurgAVIwwwADXaZQs_</value>' | sed "/CLIENTPREFIX/s/>.*</>$ip</"
<value name="CLIENTPREFIX"></value>

答案 1 :(得分:1)

使用GNU sed和变量:

CP="CLIENTPREFIX"
IP="8.8.8.8"
sed -E -i 's/("'"$CP"'">)[^<]*(<)/\1'"$IP"'\2/' name.sh

输出到文件名.sh:

<value name="CLIENTPREFIX">8.8.8.8</value>

答案 2 :(得分:1)

Yo可以捕获正则表达式找到的组

sed -i "s/\(<value.*>\).*\(<\/value>\)/\18.8.8.8\2/g" name.sh

说明:

\(\)之间的所有内容都将被视为一个群组,然后您可以\1\2等使用(取决于您定义的群组数量) )。
第一部分\(<value.*>\).*\(<\/value>\)在第一组中存储值<value name="CLIENTPREFIX">,在第二组中存储值</value>
第二部分替换匹配的所有内容,第一组的内容,然后是8.8.8.8,第二组的内容,将行<value name="CLIENTPREFIX">J_jRQtEolDEurgAVIwwwADXaZQs_</value>转换为<登记/> <value name="CLIENTPREFIX">8.8.8.8</value>

答案 3 :(得分:0)

$ sed 's/\(CLIENTPREFIX">\)[^<]*/\18.8.8.8/' file
<value name="CLIENTPREFIX">8.8.8.8</value>

或者如果你需要在变量中添加ip addr并假设ip='8.8.8.8'在某个地方设置:

$ sed 's/\(CLIENTPREFIX">\)[^<]*/\1'"$ip"'/' file
<value name="CLIENTPREFIX">8.8.8.8</value>