我須要這樣的東西: 正則表達式
grep ^"unwanted_word"XXXXXXXX
我將這個問題理解爲「如何匹配一個單詞但排除另外一個單詞」,其中一個解決方案是兩個greps系列:第一個grep找到想要的「word1」,第二個grep排除「word2」: shell
grep "word1" | grep -v "word2"
在個人狀況下:我須要區分grep的「word」選項不會作的「plot」和「#plot」(「#」不是字母數字)。 bash
但願這能夠幫助。 spa
grep提供'-v'或'--invert-match'選項來選擇不匹配的行。 code
例如 遞歸
grep -v 'unwanted_pattern' file_name
這將輸出文件file_name中的全部行,該行沒有'unwanted_pattern'。 ip
若是要在文件夾內的多個文件中搜索模式,可使用遞歸搜索選項,以下所示 字符串
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
這裏grep將嘗試列出當前目錄中全部文件中'wanted_pattern'的全部匹配項,並將其傳遞給第二個grep以過濾掉'unwanted_pattern'。 '|' - pipe將告訴shell將左程序的標準輸出(grep -r'want_pattern'*)鏈接到正確程序的標準輸入(grep -v'wiscory_pattern')。 it
正確的解決方案是使用grep -v "word" file
,其awk
等效: pip
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
等等
我有一堆文件的目錄。 我想找到全部不包含字符串「speedup」的文件,因此我成功使用瞭如下命令:
grep -iL speedup *
若是你的grep
支持使用-P
選項的Perl正則表達式,你能夠這樣作(若是是bash;若是tcsh你須要轉義!
):
grep -P '(?!.*unwanted_word)keyword' file
演示:
$ cat file foo1 foo2 foo3 foo4 bar baz
如今讓咱們列出除foo3
以外的全部foo
$ grep -P '(?!.*foo3)foo' file foo1 foo2 foo4 $