【问题标题】:Eliminating IP addresses from a log file through the console通过控制台从日志文件中删除 IP 地址
【发布时间】:2018-03-21 05:27:49
【问题描述】:

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

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

【问题讨论】:

  • 前导词边界为\<,尾随为\>,相应地替换两个\bs。

标签: regex bash sed scripting data-manipulation


【解决方案1】:

请注意这里没有任何反应:

$ 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 for boundary 受 GNU sed 支持,其他可能不存在。

【讨论】:

  • 自己找到了解决方案,但就是这样!我使用了 sed -r '.....' 不过感谢您的回复!
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多