sedスクリプトについてサポートが必要です。これらのタグで囲まれたテキストを除くすべてを削除する必要があるXMLファイルがあります。
<TEXT>......</TEXT>
<HEADLINE>......</HEADLINE>
sedコードを書くにはどうすればよいですか?ONEタグに含まれるテキスト以外のすべてを削除する方法を知っています。
s/.*<TEXT>\(.*\)<\/TEXT>.*/\1/
しかし、どうすれば多くのタグのsedコードを書くことができますか?
複数のコマンドを以下に渡すことができますsed
:
$ echo '<TEXT>Hello</TEXT>
<HEADLINE>there</HEADLINE>' | sed -n 's/.*<TEXT>\(.*\)<\/TEXT>.*/\1/gp; s/.*<HEADLINE>\(.*\)<\/HEADLINE>.*/\1/gp'
Hello
there
ただし、XMLのようなファイルに正規表現を適用する場合は注意が必要です。
有効な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
これはうまくいくかもしれません(GNU sed):
sed -r '/<(text|headline)>/I!d;s//&\n/;s/^[^\n]*\n//;:a;/<\//!{$!{N;ba}};s/\n/ /g;s/<\//\n&/;P;D' file
これにより、タグとタグの間にあるすべてのテキストが削除TEXT
さHEADLINE
れ、複数行の値が改行をスペースに置き換えます。