1

このようなファイルがあります。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>

私がしなければならないことは、<ra>タグを見つける必要があり、タグ内には値を 0.00 に置き換える必要が<ra>あるタグがあります。<a>

grep "<ra>" "abc.txt" | grep "<a>"

見つけることはできますが、変更方法がわかりません。

この出力ファイル:-

<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>
4

3 に答える 3

2

次のコードで試すことができます。

$ 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>

これは、次の構造に基づいています。

Print # in lines starting with BBB just if there was not ^# before
sed -e '/^BBB/ s/^#*/#/' -i file

区切り文字を a に変更して、 in#をエスケープする必要がないようにします。/</a>

-iファイルを更新する場合は、sed ( )に追加する必要があることに注意してくださいsed -i -e ...。それ以外の場合、結果は stdout に出力されます。

于 2013-09-26T11:04:14.217 に答える
2

この 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>

(インライン)スイッチのため、-iこの sed は元のファイル自体に変更を保存します。

于 2013-09-26T11:04:24.540 に答える