我有一个包含以下输入的文件。由点分隔的数字代表地址。地址中的任何数字都可以是一位或多位数字,如下所示:
[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
但它不打印任何东西。
扩展正则表达式(
-E
或egrep
)不知道\d
。按照@Alexander-P
的建议使用或-E
与[0-9]
or一起使用[[:digit:]]
。添加
-o
以仅选择匹配项而不是整个匹配行。这也会将单个匹配项分解为新行。或者
使用Perl 正则表达式(
-P
或pgrep
):如果您更改
+
为*
也可以使用Basic Regex:替换
-E
为-P
并添加-o
:使用
awk
:或者,
tr
如果您不介意第一个空行:grep
对于这项任务来说有点矫枉过正。tr
足够了:该
sort -u
部分删除重复的地址。