如何删除包含IP地址的行?

如何删除包含IP地址的行?

我有一个像这样的文件:

http://example.mx
https://test.com
http://4.3.4.4
http://dev.somedomain.com
http://1.3.4.2

我想去掉那些有IP的,这样结果应该是:

http://example.mx
https://test.com
http://dev.somedomain.com

我所做的是:

cat  in.log |  sed  '/^http:\/\/[0-9]/d'  > out.log

但这不起作用。

答案1

但它工作。正确的答案似乎已经存在于您的问题中。

$ cat in.log
http://example.mx
https://test.com
http://4.3.4.4
http://dev.somedomain.com
http://1.3.4.2
$ cat  in.log |  sed  '/^http:\/\/[0-9]/d'  > out.log
$ cat out.log
http://example.mx
https://test.com
http://dev.somedomain.com
$

答案2

看来你想删除线在您的输入中。除了 之外sed,还有一个非常简单的解决方案grep -v

grep -v 'http://\([0-9]\+\.\)\{3\}[0-9]\+' in.log

此外,无论哪种方式,这里都不需要catand 管道:通常cat foo | bar可以替换为,并且在这个特定实例中,您可以将文件名作为参数传递给任何一个或不需要管道。bar < foogrepsed

Shell 纯粹主义者通常会反对这种使用,cat因为它不必要地启动一个单独的进程(而且因为cat的目的是为了控制生成文件...)。

答案3

如果要删除 中的行in.log,可以使用-i的标志sed

sed -i '/^http:\/\/[0-9]/d' in.log

答案4

这已经有效,但是 /^http:\/\/[0-9]/会匹配

http://1.hello.word 

匹配“完整IP”使用/^http:\/\/[0-9\.]*$/

在哪里

  • [0-9\.]匹配数字和点...
  • *...0次或多次..
  • $...直到行尾。

相关内容