Grep

提取以分號分隔的地址並將每個地址列印在一行中

  • August 28, 2018

我有一個包含以下輸入的文件。由點分隔的數字代表地址。地址中的任何數字都可以是一位或多位數字,如下所示:

[112.112.112.112;3.3.3.3;44.44.44.44]
[6.6.6.6;17.17.17.17;88.88.88.88]

我想提取不帶分號和括號的每個地址(地址由分號分隔;),並將每個地址插入到新文件的一行中以生成此輸出:

112.112.112.112
3.3.3.3
44.44.44.44
6.6.6.6
17.17.17.17
88.88.88.88

作為第一步,我嘗試使用 grep 來提取地址,如下所示:

grep -E '\d+\.\d+\.\d+\.\d+' myfile.txt > newfile.txt

但它不列印任何東西。

擴展正則表達式-Eegrep)不知道\d。按照@Alexander-P的建議使用或-E[0-9]or一起使用[[:digit:]]

添加-o以僅選擇匹配項而不是整個匹配行。這也會將單個匹配項分解為新行。

grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' myfile.txt

或者

grep -Eo '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+' myfile.txt

使用Perl 正則表達式-Ppgrep):

grep -Po '\d+\.\d+\.\d+\.\d+' myfile.txt

如果您更改+*也可以使用Basic Regex

grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' myfile.txt

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