不包括grep

时间:2014-09-01 05:32:10

标签: grep sh

我有这个文件:

$cat foo
foo1
foo2
foo3
foo4
bar

我想grep打印

foo3
bar

所以基本上,我不知道如何排除所有foo(例如-v)除了 foo3。

5 个答案:

答案 0 :(得分:1)

可以通过以下方式完成:

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行是foo3foo4,并且您还需要所有非foo行,则可以使用awk

awk '/^foo[34]$/||!/^foo/{print}' foo

答案 1 :(得分:0)

使用grep -v 'foo[^3]',它会进行否定搜索。

答案 2 :(得分:0)

你也可以采取直接的方法:

grep "foo3\|bar"   # which is grep for foo3 or bar (must be double-quoted)

答案 3 :(得分:0)

以下是您可以使用的awk

awk '!/foo[^3]/' file
foo3
bar

答案 4 :(得分:0)

您可以尝试以下使用负向前瞻的grep命令

$ grep -vP '^(?!foo3)foo.*$' file
foo3
bar

它匹配除字符串foo字符串之外的所有foo3字符串。通过-v参数反转匹配将为您提供所需的输出。