bash/sed を使用して XML 属性値を抽出する方法

bash/sed を使用して XML 属性値を抽出する方法

次の grep コマンドを sed にパイプして要素名属性を検索し、sed の結果を name 変数に格納します。

 name=$(grep -E "<element.*name=.*/>" "$F" | sed -e "s/.*<element.*name=\(.*\)\/>.*?/\1/")

サンプルデータ -

<element name="Barium"/>

望ましい出力 -

Barium

実際の出力 -

<element name="Barium"/>

sed コマンドを使用して余分な部分を削除する方法が少しわかりません。

(xmllint を使えば簡単にできるのは分かっていますが、この用途には使えません)

答え1

これには sed は必要ありません:

grep -Po '(?<=<element name=")[^"]+' <file>

または

grep -Po '<element name="\K[^"]+' <file>

関連情報