用两个参数精确搜索grep

时间:2013-06-05 15:09:23

标签: linux bash grep

如何用两个参数做一个grep(操作AND);找到包含该单词的所有行都成功完成并失败。

EG:

1. succeeded, failed
2. failed, succeeded
3. failed,failed
4. succeeded, succeeded
5. failed
6. faileds
7. succeeded

我需要搜索返回包含“成功”和“失败”字样的行,如第1,2和4行所示

5 个答案:

答案 0 :(得分:4)

很简单:

grep succeeded | grep failed

可替换地:

grep 'succeeded.*failed\|failed.*succeeded'

后一种方法不能很好地扩展(你最终得到P(N, N)子句带有N个单词),但在处理单词之间的相对位置等事情时可以更灵活。

答案 1 :(得分:2)

首先,我认为第4行不应该是结果。其中没有failed

grep 'succeeded' input|grep 'failed'

答案 2 :(得分:1)

使用AND

在同一行上存在2个单词
grep succeeded FILE | grep failed

grep succeeded FILE将从FILE打印所有已成功加入的行,然后grep failed将从grep succeeded FILE的结果中打印出已失败的行。因此,如果使用管道组合这些,它将显示包含成功和失败的行。

答案 3 :(得分:1)

一些不同的方法只需要一次通过文件:

awk '/succeeded/ && /failed/' file
sed -n '/succeeded/ {/failed/ p}' file
perl -ne 'print if /succeeded/ and /failed/' file

我希望grep -e succeeded -e failed file可以工作,但它会返回"其中一个"而不是"两者都是"。

答案 4 :(得分:0)

grep 'failed' <(grep 'succeeded' inputFile)