Sed

如何使用正則表達式從字元串中獲取所有數字和 IP?

  • July 6, 2022

假設我有以下範例字元串:

<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}'

這將每行列印一個值,當然也會0ETH0末尾擷取。


如果您只需要輸入行中包含與上述類似結構(而不是其他結構)的數字和 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>,'

引用自:https://unix.stackexchange.com/questions/708842