我需要这样的东西:
grep ^"unwanted_word"XXXXXXXX
我需要这样的东西:
grep ^"unwanted_word"XXXXXXXX
当前回答
正确的解决方案是使用grep -v "word"文件,它的awk等价:
awk '!/word/' file
然而,如果你碰巧有一个更复杂的情况,你想要,比如,XXX出现,YYY不出现,那么awk就很方便了,而不是通过管道处理几个grep:
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
你甚至可以说一些更复杂的东西。例如:我想要那些包含XXX或YYY的行,但不包含ZZZ:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
etc.
其他回答
使用grep -v进行反向匹配:
grep -v "unwanted word" file pattern
我把这个问题理解为“如何匹配一个单词但排除另一个”,对此的一个解决方案是两个grep串联:第一个grep找到想要的“word1”,第二个grep排除“word2”:
grep "word1" | grep -v "word2"
在我的例子中:我需要区分“plot”和“#plot”,grep的“word”选项不会这样做(“#”不是字母数字)。
正确的解决方案是使用grep -v "word"文件,它的awk等价:
awk '!/word/' file
然而,如果你碰巧有一个更复杂的情况,你想要,比如,XXX出现,YYY不出现,那么awk就很方便了,而不是通过管道处理几个grep:
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
你甚至可以说一些更复杂的东西。例如:我想要那些包含XXX或YYY的行,但不包含ZZZ:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
etc.
我通过使用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
你可以使用grep的-v (for——invert-match)选项as:
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" file将过滤包含unwanted_word的行,grep XXXXXXXX将只列出模式为XXXXXXXX的行。
编辑:
从您的注释中,看起来您想要列出所有没有unwanted_word的行。在这种情况下,你只需要:
grep -v 'unwanted_word' file