我正在尝试删除>之间的字符。符号和<符号如下所示,并替换为IP地址8.8.8.8
<value name="CLIENTPREFIX">J_jRQtEolDEurgAVIwwwADXaZQs_</value>
我已尝试使用sed首先删除字符
sed -i "/CLIENTPREFIX/s/\b>*.\b>//" name.sh
然后使用单独的命令添加IP地址
有人可以帮助将两个命令组合到一个命令中吗?
谢谢!
答案 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>