Bashスクリプト - タグ内のテキスト出力

Bashスクリプト - タグ内のテキスト出力

タグ内にコンテンツをインポートする必要があるファイルがあります。たとえば、

<Model500>
ABC
BCD 
CDE
</Model500>


<Model500>
123
234
345
</Model500>

の内容を抽出したい。

<Model500>
</Model500>

「sed」を使用

だからそれは

ABC
BCD
CDE

123
234
345

使ってみました。

sed -e 's/<Model>\,/</Model>/p' file.txt

しかし、特殊文字で問題が発生しました。どんな提案がありますか?ありがとうございます。

ベストアンサー1

入力がXMLの場合は、XML関連ツールを使用するのが最善です。

方法1

sed正規表現にaを含める1つの方法は、/バックスラッシュを使用してエスケープすることです。

$ sed -ne '/<Model500>/,/<\/Model500>/p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

この式は/<Model500>/,/<\/Model500>/行の範囲を指定します。範囲は一致する行で始まり<Model500>、一致する行で終わります<\/Model500>。代替コマンドではなく範囲を指定するため、式はで始まりませんs

方法2

エスケープしたくない場合は、別の区切り文字を使用できます。

$ sed -ne '\|<Model500>|,\|</Model500>|p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

ここでは区切り記号として使用します|/区切り記号以外の区切り文字が範囲で使用されたことを示すには、最初の区切り文字をエスケープする必要があります\|

おすすめ記事