Sed
如何使用正則表達式從字元串中獲取所有數字和 IP?
假設我有以下範例字元串:
<ETH0_IP><![CDATA[10.0.100.10]]></ETH0_IP>
我想以以下格式提取第一個數字 和****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}'
),但當時有一個,我想知道我是否可以在一行中實現它
如果您想要所有(整數)數字和所有 IP(v4) 地址,請使用 grep 在正則表達式中添加一個替代:
... | grep -oE '[0-9]+|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
這將每行列印一個值,當然也會
0
從ETH0
末尾擷取。如果您只需要輸入行中包含與上述類似結構(而不是其他結構)的數字和 IP,您可以使案例如 sed:
... | sed -nEe 's,.*<ETH([0-9]+)_IP><!\[CDATA\[([0-9.]+)\]\]></ETH[0-9]+_IP>.*,\1 \2,p'
\1
並\2
對應括號中的第一組和第二組,[0-9.]+
為了清晰和懶惰,我將IP與這裡匹配。或在 Perl 中類似:
... | perl -ne 'print "$1 $2\n" if m,<ETH([0-9]+)_IP><!\[CDATA\[([0-9.]+)\]\]></ETH[0-9]+_IP>,'