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

Eliminating IP addresses from a log file through the console

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

和其他一些变体。

但什么也没发生

问题是在像 regextester.com 这样的正则表达式测试网站中,表达式确实证明了我要删除的 IP 地址。

有人可以给我提示吗?

注意这里没有任何反应:

$ 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 开启扩展正则表达式。

或者,如果 { 被转义,可以使用带有基本正则表达式的 sed 成功(即,没有 -E):

$ 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 边界由 GNU sed 支持,其他人可能不支持。