次の例の文字列があるとします。
<ETH0_IP><![CDATA[10.0.100.10]]></ETH0_IP>
私の考えではタブレットこれ最初の数字 そしてこれ知的財産権次の形式を使用してください。
0 10.0.100.10
sed 's@^[^0-255]*\([0-255]\+\).*@\1@'
最初の()番号とIP(grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
)を抽出する方法を知っていますが、その時1行で達成できるかどうか知りたいです。
ベストアンサー1
すべての(整数)数値とすべてのIP(v4)アドレスが必要な場合は、grepを使用して正規表現に代替エントリを追加してください。
... | grep -oE '[0-9]+|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
これにより、1行に1つの値が印刷され、もちろん最後0
からキャプチャされます。ETH0
上記のような構造の数字とIPを含む入力行だけが必要な場合(他の構造は必要ありません)、たとえばsedを使用できます。
... | sed -nEe 's,.*<ETH([0-9]+)_IP><!\[CDATA\[([0-9.]+)\]\]></ETH[0-9]+_IP>.*,\1 \2,p'
\1
そして、括弧内の最初と2番目のグループに対応することは、\2
明確さと怠惰のためにここにIPを一致させました。[0-9.]+
またはPerlでも同様です:
... | perl -ne 'print "$1 $2\n" if m,<ETH([0-9]+)_IP><!\[CDATA\[([0-9.]+)\]\]></ETH[0-9]+_IP>,'