通过控制台从日志文件中删除IP地址

时间:2017-10-09 22:37:20

标签: regex bash sed scripting data-manipulation

我正在尝试从日志文件中删除一些包含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地址。

有人可以给我一个提示吗?

1 个答案:

答案 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

GNU sed支持

\b边界,其他人可能不存在。