次はなぜ機能しないのですか?
INTERNAL_NUM=$(grep -E '\s*internal_num\s*=' file.xml |sed -E 's/internal_num\s*=\s*([0-9]\+)/\1/')
echo "$INTERNAL_NUM"
実際の数字を印刷したいのですが、次のように印刷されます。
internal_num = 1234
コマンドgrep
はを印刷するため、internal_num = 1234
その部分は正常です。sed
動作しないパイプです。
ベストアンサー1
GNU grepがあれば、次のように書くことができます。
grep -oP '\binternal_num\s*=\s*\K\d+' file.xml
ただし、正規表現を使用してXMLを解析しないでください。たぶん、このようなことが必要かもしれません。
$ echo '
<root>
<tag>
<tag>
<wanted internal_num="1234" />
<wanted internal_num = "5678" />
</tag>
</tag>
</root>
' | xmlstarlet sel -t -v '//@internal_num' -n
1234
5678
入力ファイルを見せてください。