我有一个像这样的文件:
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
此外,无论哪种方式,这里都不需要cat
and 管道:通常cat foo | bar
可以替换为,并且在这个特定实例中,您可以将文件名作为参数传递给任何一个或不需要管道。bar < foo
grep
sed
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次或多次..$
...直到行尾。