通过控制台从日志文件中删除 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 支持,其他人可能不支持。
我正在尝试从日志文件中删除一些包含 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 支持,其他人可能不支持。