0

特定のxmlステートメントを置き換えてコメントとして作成しようとしています.Linuxのawk、sed、または正規の文法式を試していますが、とにかくこのタスクを達成できる完全に行き詰まっています.以下はシナリオです探しています。

たとえば 、多数の xml ファイルがあります。「Distribution_Facilities_carrying_Item」という単語があり、コメント ステートメントに置き換える必要があるステートメントを置き換えたい。ステートメントが----であるとします

<Parameter name="RelationshipName1" direction="in" eval="constant" type="string">Distribution_Facilities_carrying_Item</Parameter>

.....このステートメントには「Distribution_Facilities_carrying_Item」という単語が含まれているため、このステートメントをコメントとして置き換えます。したがって、次のように置き換えてください。

<!--Parameter name="RelationshipName1" direction="in" eval="constant" type="string">Distribution_Facilities_carrying_Item</Parameter-->

さらに、すべての xml ファイル内のそのようなステートメントはすべて、コメント付きの xml ステートメントとして置き換える必要があります。以下は、それらが発生する可能性のあるパターンです。どのように対処すればよいでしょうか。正規表現に精通している必要があることはわかっています。それが達成する唯一の方法だからです。................................... このステートメントは、n 個の xml ファイルに含めることができます。ファイル:a.xml

<Parameter name="RelationshipName1" direction="in" eval="constant" type="string">Distribution_Facilities_carrying_Item</Parameter>
<Parameter direction="in" eval="constant" type="string" name="RelationshipName3">Distribution_Facilities_carrying_Item</Parameter>
<Parameter name="RelationshipName" direction="in" eval="constant" type="string">Distribution_Facilities_carrying_Item</Parameter>
<Parameter direction="in" name="RelationshipName10" type="string" eval="constant">Distribution_Facilities_carrying_Item</Parameter>
<Parameter direction="in" name="RelationshipName11" type="string" eval="constant">Distribution_Facilities_carrying_Item</Parameter>
<Parameter direction="in" eval="constant" type="string" name="RelationshipName5">Distribution_Facilities_carrying_Item</Parameter>

前もって感謝します!!

4

4 に答える 4

3

使用sed:

sed '/Distribution_Facilities_carrying_Item/ s/<\(.*\)>/<!--\1-->/' inputfile

string を含むすべての行をコメント化しますDistribution_Facilities_carrying_Item

ファイルをインプレースで変更する場合は、次の-iオプションを追加します。

sed -i '/Distribution_Facilities_carrying_Item/ s/<\(.*\)>/<!--\1-->/' inputfile

ディレクトリ内のすべての.xmlファイルに対してこれを実行する場合は、 and を使用find-execます。

find /some/dir -maxdepth 1 -type f -name "*.xml" -exec sed -i '/Distribution_Facilities_carrying_Item/ s/<\(.*\)>/<!--\1-->/' {} \;

(再帰的に実行する場合-maxdepth 1は、コマンドから削除してください。)find

于 2013-08-29T11:30:01.920 に答える
1

以下のsed方程式で確認してください。コメントします

sed -i 's/\(<.*Distribution_Facilities_carrying_Item.*>\)/<!--\1-->/' filename.xml
于 2013-08-29T12:09:47.310 に答える