nel*_*aro 40 linux search bash grep
我正在尝试构建一个 grep 搜索来搜索一个术语,但排除具有第二个术语的行。我想使用多个-e "pattern"
选项,但这没有用。
这是我尝试过的命令及其生成的错误消息的示例。
grep -i -E "search term" -ev "exclude term"
grep: exclude term: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在我看来,这-v
适用于所有搜索词/模式。由于此运行但随后不包含search term
在结果中。
grep -i -E "search term" -ve "exclude term"
Run Code Online (Sandbox Code Playgroud)
Tho*_*hor 48
为了和使用grep表达式,你需要两个调用:
grep -Ei "search term" | grep -Eiv "exclude term"
Run Code Online (Sandbox Code Playgroud)
如果您要搜索的术语不是正则表达式,请使用-F
更快的固定字符串匹配 ( ):
grep -F "search term" | grep -Fv "exclude term"
Run Code Online (Sandbox Code Playgroud)
Den*_*nis 22
除了两次调用 grep 之外,我只能想到一种方法来完成此操作。它涉及Perl 兼容正则表达式(PCRE) 和一些相当hacky的环视断言。
要搜索foo排除包含bar 的匹配项,您可以使用:
grep -P '(?=^((?!bar).)*$)foo'
Run Code Online (Sandbox Code Playgroud)
这是它的工作原理:
(?!bar)
匹配任何不bar 的东西,而不消耗字符串中的字符。然后.
消耗单个字符。
^((?!bar).)*
从字符串的开头 ( ^
) 到结尾( )重复上述内容$
。如果bar
在任何给定点遇到它,它将失败,因为(?!bar)
不会匹配。
(?=^((?!bar).)*$)
确保字符串匹配前一个模式,而不消耗字符串中的字符。
foo
像往常一样搜索foo。
我在正则表达式中发现了这个 hack来匹配不包含单词的字符串?. 在Bart Kiers 的回答中,您可以找到有关负面预测如何运作的更详细的解释。
小智 15
格式:
echo "some text" | awk '/pattern to match/ && !/pattern to exclude/'
例子:
echo "hello there" | awk '/hello/ && !/there/'
什么都不返回。
echo "hello thre" | awk '/hello/ && !/there/'
返回:你好三
echo "hllo there" | awk '/hello/ && !/there/'
什么都不返回。
例子:
echo "hello thre" | awk '(/hello/ || /hi/) && !/there/'
返回:你好三
echo "hi thre" | awk '(/hello/ || /hi/) && !/there/'
返回: 嗨三
echo "hello there" | awk '(/hello/ || /hi/) && !/there/'
什么都不返回。
echo "hi there" | awk '(/hello/ || /hi/) && !/there/'
什么都不返回。
归档时间: |
|
查看次数: |
94151 次 |
最近记录: |