我有这个文件:
$cat foo
foo1
foo2
foo3
foo4
bar
我想grep打印
foo3
bar
所以基本上,我不知道如何排除所有foo(例如-v)除了 foo3。
答案 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
行是foo3
和foo4
,并且您还需要所有非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
参数反转匹配将为您提供所需的输出。