我需要类似的东西:
grep ^"unwanted_word"XXXXXXXX
答案 0 :(得分:687)
您也可以使用grep的-v
选项执行此操作:
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" file
会过滤unwanted_word
和grep XXXXXXXX
只会列出模式为XXXXXXXX
的行的行。
修改强>
从您的评论中看起来您想要列出没有unwanted_word
的所有行。在这种情况下,您只需要:
grep -v 'unwanted_word' file
答案 1 :(得分:75)
我将这个问题理解为“如何匹配一个单词但排除另一个单词”,其中一个解决方案是两个greps系列:第一个grep找到想要的“word1”,第二个grep除了“word2”:
grep "word1" | grep -v "word2"
在我的情况下:我需要区分grep的“word”选项不会执行的“plot”和“#plot”(“#”不是字母数字)。
希望这有帮助。
答案 2 :(得分:31)
如果grep
支持使用-P
选项的Perl正则表达式,则可以执行(如果使用bash;如果tcsh,则需要转义!
):
grep -P '(?!.*unwanted_word)keyword' file
演示:
$ cat file
foo1
foo2
foo3
foo4
bar
baz
现在让我们列出除foo
foo3
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
答案 3 :(得分:29)
正确的解决方案是使用grep -v "word" file
及其等效的awk
:
awk '!/word/' file
但是,如果您碰巧遇到了更复杂的情况,例如XXX
出现而YYY
不出现,那么{{1}方便而不是管道几个awk
s:
grep
你甚至可以说更复杂的事情。例如:我希望这些行包含awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
或XXX
,但不包含YYY
:
ZZZ
等
答案 4 :(得分:10)
使用grep -v反转匹配:
grep -v "unwanted word" file pattern
答案 5 :(得分:4)
-v
选项会显示与模式不匹配的所有行。
grep -v ^unwanted_word
答案 6 :(得分:4)
grep提供'-v'或'--invert-match'选项来选择不匹配的行。
e.g。
grep -v 'unwanted_pattern' file_name
这将输出文件file_name中的所有行,该行没有'unwanted_pattern'。
如果要在文件夹内的多个文件中搜索模式,可以使用递归搜索选项,如下所示
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
这里grep将尝试列出当前目录中所有文件中'wanted_pattern'的所有匹配项,并将其传递给第二个grep以过滤掉'unwanted_pattern'。 '|' - 管道将告诉shell将左程序的标准输出(grep -r'want_pattern'*)连接到右程序的标准输入(grep -v'wiscory_pattern')。
答案 7 :(得分:0)
我使用grep -vw "^/"
排除了根(“ /”)安装点。
# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}'
/
/root/.m2
/root
/var
# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}' | grep -vw "^/"
/root/.m2
/root
/var
答案 8 :(得分:-4)
我有一堆文件的目录。我想找到所有不包含字符串的文件" speedup"所以我成功使用了以下命令:
grep -iL speedup *