我想在目录中的所有文件中搜索模式。 我知道这可以通过
来实现grep -r "<pattern1>"
但是我希望在所有具有pattern1的文件中显示所有行,并且没有第二种模式说出pattern2。
例如:
grep -r "chrome"
上面的命令打印所有包含“chrome”字样的行。但我想只打印那些有铬但不包含“chrome.storage.sync”的行。
答案 0 :(得分:4)
您可以使用管道过滤掉行
grep "chrome" inputFile | grep -v "chrome\.storage\.sync"
来自手册页
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
<强>测试强>
$ cat test
chrome
chrome chrome.storage.sync
$ grep "chrome" test | grep -v "chrome\.storage\.sync"
chrome
答案 1 :(得分:2)
如果您的grep支持P
,那么您可以使用以下基于正则表达式的grep命令。
grep -Pr '^(?=.*chrome)(?!.*chrome\.storage\.sync)'
正则表达式:
^ the beginning of the string
(?= look ahead to see if there is:
.* any character except \n (0 or more
times)
chrome 'chrome'
) end of look-ahead
(?! look ahead to see if there is not:
.* any character except \n (0 or more
times)
chrome 'chrome'
\. '.'
storage 'storage'
\. '.'
sync 'sync'
) end of look-ahead
更短的形式,
grep -Pr 'chrome(?!\.storage\.sync)'
(?!\.storage\.sync)
否定前瞻断言匹配后的字符串可以是.storage.sync