不计我有这个文件:使用grep
$cat foo
foo1
foo2
foo3
foo4
bar
而且我想grep来打印
foo3
bar
所以基本上,我不知道如何排除所有的foo(其-v例如),除了 foo3。
不计我有这个文件:使用grep
$cat foo
foo1
foo2
foo3
foo4
bar
而且我想grep来打印
foo3
bar
所以基本上,我不知道如何排除所有的foo(其-v例如),除了 foo3。
这是可以做到的:
grep -v '^foo[^3]$' foo
你还在用-v
排除国旗,但你只排除foo
条目,如果他们跟随由非3
。
但是,虽然这将适用于您的给定的输入文件,您也可能想剥离行foo
对他们以及。如果这是需要的,请使用:
grep -v '^foo[^3]$' foo | grep -v '^foo$'
或:
grep -Ev '^foo[^3]|foo$' foo
如果你的要求变得更加复杂,它可能是更好的选择了一个更先进的工具。例如,上面的grep
也会给你foo39
。对于一个情况下,你想要的只有foo
线foo3
和foo4
,并且还希望所有非foo
行,你可以使用awk
:
awk '/^foo[34]$/||!/^foo/{print}' foo
使用grep -v 'foo[^3]'
,它会做一个否定搜索。
您也可以采取直接的办法:
grep "foo3\|bar" # which is grep for foo3 or bar (must be double-quoted)
这里是一个awk
你可以使用:
awk '!/foo[^3]/' file
foo3
bar
你可以试试它使用负先行grep命令下面,
$ grep -vP '^(?!foo3)foo.*$' file
foo3
bar
它匹配除字符串0123之外的所有foo
字符串字符串。通过-v
参数反转匹配会为您提供所需的输出。
你是否也有'foo33',而且仍然只有'foo3'?由于这将打破这里发布的大多数解决方案(包括我的)。 – Jotne 2014-09-01 05:51:27