我正在尝试从日志文件中删除一些包含IP地址的行。我目前正在使用sed命令使用bash脚本。我在Ubuntu 16.04上运行它。 日志文件具有此格式
... //data type 1
... //data type 2
0.0.0.0 //IP 1
...
...
127.0.0.1 //IP 2
等等。 我正在运行的命令是
sed 's/\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b//g' input.txt > output.txt
也
sed '/\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b/d' input.txt > output.txt
以及其他一些变体。
但没有任何反应
问题在于regex测试版网站如regextester.com,表达式实际上证明了我想要消除的IP地址。
有人可以给我一个提示吗?
答案 0 :(得分:0)
观察到这里没有任何反应:
$ sed 's/\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b//g' input.txt
... //data type 1
... //data type 2
0.0.0.0 //IP 1
...
...
127.0.0.1 //IP 2
但是,sed
成功删除了IP:
$ sed -E 's/\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b//g' input.txt
... //data type 1
... //data type 2
//IP 1
...
...
//IP 2
-E
启用扩展正则表达式。
或者,如果-E
被转义,则可以使用带有基本正则表达式的sed(即没有{
)成功:
$ sed 's/\b[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\b//g' input.txt
... //data type 1
... //data type 2
//IP 1
...
...
//IP 2
\b
功能是GNU扩展。在其他版本的sed中可能没有。
上面的正则表达式涉及很多重复。这可以减少如下:
$ sed -E 's/[0-9]{1,3}(\.[0-9]{1,3}){3}//g' input.txt
... //data type 1
... //data type 2
//IP 1
...
...
//IP 2
对于旧版本的GNU sed,您可能需要使用-r
代替-E
。
\b
边界,其他人可能不存在。