特定のタグ名を含むxmlファイルを見つけて、タグ名間の単語を印刷します。

特定のタグ名を含むxmlファイルを見つけて、タグ名間の単語を印刷します。

次のようにxmlファイル形式を見つけることができます。

find /tmp/ -type f -name '*.xml'

しかし、次のようなXMLのみを見つけるように構文をどのように変更できますか?

<Name>some words</Name>

次の間に内容を印刷します。

<Name> ------ </Name>

期待される出力

some words      

例 – xml ファイルには次のものが含まれます。

<Name>files_with_extra_data</Name>

期待される出力

files_with_extra_data

ベストアンサー1

簡単な解決策はsedを使用することです。

find /tmp -name '*.xml' -exec sed -n 's/<Name>\([^<]*\)<\/Name>/\1/p' {} +

正規表現はタグを一致させ、タグ間の内容を印刷します。エスケープ文字を削除すると、読みやすくなります。

s / <Name>([^<]*)</Name> / \1 

角かっこは "<"以外のすべての文字と一致し、\ 1にマップされます。

コメントで述べたように、これは簡単な解決策になります。正規表現は、構造化テキストのすべての可能な変形に対処することはできません。したがって、タグまたは他のタグの間に複数行がある場合は機能せず、実際のXMLパーサーを使用する必要があります。

おすすめ記事