Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用脚本搜索并替换标记内的值_Unix_Sed_Awk - Fatal编程技术网

Unix 使用脚本搜索并替换标记内的值

Unix 使用脚本搜索并替换标记内的值,unix,sed,awk,Unix,Sed,Awk,我有一个这样的文件abc.txt <ra><r>12.34</r><e>235</e><a>34.908</a><r>23</r><a>234.09</a><p>234</p><a>23</a></ra> <hello>sadfaf</hello> <hi>hiisadf

我有一个这样的文件<代码>abc.txt

<ra><r>12.34</r><e>235</e><a>34.908</a><r>23</r><a>234.09</a><p>234</p><a>23</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>345</a><po>234</po><a>345</a></ra>
12.3423534.90823234.09234

23 萨法夫 希萨德 ASDF345
我要做的是找到
标签,对于
标签内部,有
标签,我必须用0.00替换其valeus

grep "<ra>" "abc.txt" | grep "<a>"
grep”““abc.txt”| grep”
我能找到,但我不知道如何改变

此文件的输出文件:-

<ra><r>12.34</r><e>235</e><a>0.00</a><r>23</r><a>0.00</a><p>234</p><a>0.00</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>0.00</a><po>234</po><a>0.00</a></ra>
12.342350.00230.00234

0.00 萨法夫 希萨德 asdf3450.002340.00
您可以尝试使用以下代码:

$ sed -e '/<ra>/ s#<a>[^<]*<#<a>0.00<#g' file
<ra><r>12.34</r><e>235</e><a>0.00</a><r>23</r><a>0.00</a><p>234</p><a>0.00</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>0.00</a><po>234</po><a>0.00</a></ra>
将分隔符更改为
#
,这样我们就不需要在
中转义
/


请注意,如果希望更新文件,则需要将
-i
添加到sed(
sed-i-e…
)。否则,结果将打印在标准输出中。

您可以使用以下代码进行尝试:

$ sed -e '/<ra>/ s#<a>[^<]*<#<a>0.00<#g' file
<ra><r>12.34</r><e>235</e><a>0.00</a><r>23</r><a>0.00</a><p>234</p><a>0.00</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>0.00</a><po>234</po><a>0.00</a></ra>
将分隔符更改为
#
,这样我们就不需要在
中转义
/

请注意,如果希望更新文件,则需要将
-i
添加到sed(
sed-i-e…
)。否则,结果将打印在标准输出中。

此sed应能工作:

sed -i.bak '/<ra>/s~\(<a>\)[^<]*\(</a>\)~\10.00\2~g' abc.txt
<ra><r>12.34</r><e>235</e><a>0.00</a><r>23</r><a>0.00</a><p>234</p><a>0.00</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>0.00</a><po>234</po><a>0.00</a></ra>
sed-i.bak'//s~ \(\)[^此sed应能工作:

sed -i.bak '/<ra>/s~\(<a>\)[^<]*\(</a>\)~\10.00\2~g' abc.txt
<ra><r>12.34</r><e>235</e><a>0.00</a><r>23</r><a>0.00</a><p>234</p><a>0.00</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>0.00</a><po>234</po><a>0.00</a></ra>

sed-i.bak'//s~ \(\)[^使用
awk
gsub

awk '/^<ra>/ {gsub(/<a>[^<]*</,"<a>0.00<")}1' file
<ra><r>12.34</r><e>235</e><a>0.00</a><r>23</r><a>0.00</a><p>234</p><a>0.00</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>0.00</a><po>234</po><a>0.00</a></ra>

awk'/^/{gsub(/[^使用
awk
gsub

awk '/^<ra>/ {gsub(/<a>[^<]*</,"<a>0.00<")}1' file
<ra><r>12.34</r><e>235</e><a>0.00</a><r>23</r><a>0.00</a><p>234</p><a>0.00</a></ra>
<hello>sadfaf</hello>
<hi>hiisadf</hi>
<ra><s>asdf</s><qw>345</qw><a>0.00</a><po>234</po><a>0.00</a></ra>

awk'/^/{gsub(/[^
/
查找其中包含
的所有行,然后替换
s~(\)[^
/
查找其中包含
的所有行,然后替换
s~(\)[^你不需要最后一个
/a>
的开头,这是一个很好的观点,@Jotne。但是,我添加了
,这样就可以接受像
你好
这样的情况,也就是说,允许其他标记在
中。无论如何,我发现它做得不正确,所以我将使用你建议的表达式t、 谢谢!你的观点也很好,你忘了还有其他的标记,比如粗体。你不需要最后的
/a>
的开头,@Jotne。但是,我添加了
,这样就可以接受
hellohou
这样的情况,也就是说,允许其他标记在
中>.无论如何,我发现它做得不太好,所以我会使用你建议的表达方式。谢谢!你的观点也很好,你忘了还有其他标签,比如粗体。