これが完全に機能する例です。
メールアドレスのみを抽出する場合は、次のようにすることができます。
1) XML ファイル spam.xml が次のようなものであるとします
<spam>
<victims>
<victim>
<name>The Pope</name>
<email>[email protected]</email>
<is_satan>0</is_satan>
</victim>
<victim>
<name>George Bush</name>
<email>[email protected]</email>
<is_satan>1</is_satan>
</victim>
<victim>
<name>George Bush Jr</name>
<email>[email protected]</email>
<is_satan>0</is_satan>
</victim>
</victims>
</spam>
2) この短い bash コードでメールを取得して処理できます:
#!/bin/bash
emails=($(grep -oP '(?<=email>)[^<]+' "/my_path/spam.xml"))
for i in ${!emails[*]}
do
echo "$i" "${emails[$i]}"
# instead of echo use the values to send emails, etc
done
この例の結果:
0 [email protected]
1 [email protected]
2 [email protected]
重要な注意:
これを重大な問題に使用しないでください。これは、いろいろ試したり、すばやく結果を取得したり、grep を学習したりするのには問題ありませんが、間違いなくすべきです。 生産用の XML パーサーを探し、学習し、使用します (以下の Micha のコメントを参照してください)。
xmllint を試すことができます
<ブロック引用>xmllint プログラムは、コマンドラインで xmlfile として指定された 1 つ以上の XML ファイルを解析します。選択したオプションに応じて、さまざまなタイプの出力が印刷されます。 XMLコードとXMLパーサー自体の両方でエラーを検出するのに役立ちます
--pattern オプションを使用して、xpath で XML ドキュメント内の要素を選択できます。
Mac OS X (Yosemite) では、デフォルトでインストールされています。
Ubuntu では、まだインストールされていない場合は、apt-get install libxml2-utils
を実行できます。
誰もxmlshについて言及していないことに驚いています。ミッション ステートメント :
<ブロック引用>Unix シェルの哲学と設計に基づく XML 用のコマンド ライン シェル
xmlsh は使い慣れたスクリプト環境を提供しますが、特に xml プロセスのスクリプト作成用に調整されています。
シェルのようなコマンドのリストがここに提供されています。
xed
を使用します sed
に相当する多くのコマンド XML の場合、XPath
を許可します ベースの検索と置換。
xmlstarlet もあります (Windows でも利用可能です)。
http://xmlstar.sourceforge.net/doc/xmlstarlet.txt