sed正規表現を使用して数値部分のみをキャプチャする

sed正規表現を使用して数値部分のみをキャプチャする

次はなぜ機能しないのですか?

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

入力ファイルを見せてください。

おすすめ記事