Regex 通过控制台从日志文件中删除IP地址
我试图从日志文件中删除一些包含IP地址的行。我目前正在使用sed命令使用bash脚本。我在Ubuntu 16.04上运行它。 日志文件具有此格式Regex 通过控制台从日志文件中删除IP地址,regex,bash,sed,scripting,data-manipulation,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.
... //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
也
以及其他一些变体
但什么也没发生
问题是在regex tester网站(如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
for boundary受GNU sed支持,其他版本可能不支持。前导词boundary是\
,相应地替换这两个\b
s。我自己找到了解决方案,但就是这样!我使用了sed-r'....,谢谢您的回复!
$ 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