0

sedスクリプトについてサポートが必要です。これらのタグで囲まれたテキストを除くすべてを削除する必要があるXMLファイルがあります。

<TEXT>......</TEXT>
<HEADLINE>......</HEADLINE>

sedコードを書くにはどうすればよいですか?ONEタグに含まれるテキスト以外のすべてを削除する方法を知っています。

s/.*<TEXT>\(.*\)<\/TEXT>.*/\1/

しかし、どうすれば多くのタグのsedコードを書くことができますか?

4

3 に答える 3

1

複数のコマンドを以下に渡すことができますsed

$ echo '<TEXT>Hello</TEXT>
<HEADLINE>there</HEADLINE>' | sed -n 's/.*<TEXT>\(.*\)<\/TEXT>.*/\1/gp; s/.*<HEADLINE>\(.*\)<\/HEADLINE>.*/\1/gp' 
Hello
there

ただし、XMLのようなファイルに正規表現を適用する場合は注意が必要です。

于 2013-01-24T20:49:51.350 に答える
1

有効なXMLがあると仮定します。

sed '/.*<\(TEXT\|HEADLINE\)>\(.*\)<\/\(TEXT\|HEADLINE\)>.*/!d;s//\2/' yourfile.xml

sedスクリプトを使用する場合は、次の行を追加します。

/.*<\(TEXT\|HEADLINE\)>\(.*\)<\/\(TEXT\|HEADLINE\)>.*/!d;s//\2/

次に、以下を実行します。

sed -f yourscript.sed < yourfile.xml
于 2013-01-24T20:50:02.850 に答える
0

これはうまくいくかもしれません(GNU sed):

 sed -r '/<(text|headline)>/I!d;s//&\n/;s/^[^\n]*\n//;:a;/<\//!{$!{N;ba}};s/\n/ /g;s/<\//\n&/;P;D' file

これにより、タグとタグの間にあるすべてのテキストが削除TEXTHEADLINEれ、複数行の値が改行をスペースに置き換えます。

于 2013-01-25T07:07:10.063 に答える