ksh:grep命令用于多个字符串。如果找到所有字符串,则只返回结果

时间:2014-03-06 09:29:41

标签: unix grep ksh

有没有办法在ksh中grep 2个字符串,只有在找到字符串时才返回true?

如果找到任何字符串,我们可以使用egrep命令。但是为了匹配所有字符串并返回true,只显示所有字符串。

grep“string1”“sring2”file.txt无效。

请帮助。 提前谢谢。

编辑:

请注意,如果没有使用grep,我们可以使用其他选项。此外,第一个字符串出现在文件的第一行,而string2出现在文件的另一行中。

4 个答案:

答案 0 :(得分:3)

你可以尝试

grep "string1.*string2" file

在此测试中,string1必须在同一行的string2之前才能生效。


或者你可以这样做:

grep string1 file | grep string2 

如果找到string1string2

,则为真

使用awk

awk '/string1/ && /string2/' file

搜索任何行

awk '/string1/ {f1=1} /string2/ {f2=1} END {if (f2 && f1) print "found"}' file

获得退出状态(信誉Adrian)

awk '/string1/ {f1=1} /string2/ {f2=1} END {exit !(f1 && f2)}' file

如果找不到两种模式的退出状态0,则1如果不是

答案 1 :(得分:1)

$ echo "foo bar quux" | awk 'BEGIN{r=1} /foo/&&/bar/{r=0} END{exit r}'
$ echo $?
0

$ echo "foo bar quux" | awk 'BEGIN{r=1} /blah/&&/blubb/{r=0} END{exit r}'
$ echo $?
1

要获得更具动态性的方法,请查看Dennis Williamson's answer here

答案 2 :(得分:1)

如果您希望两个模式存在于相同或不同的行中(在同一文件中),请考虑以下这一点:

grep string1 file.txt && grep string2 file.txt

只有当两个(&&)成功时它才会成功,它会优化布尔逻辑,只有在第一个成功时才运行第二个 - 这没关系,除非你想做更多的事情:

你可以对它进行分组并制作一个'then / else'类的东西 - 请注意(),它会给你整个grep&&的结果。 grep:(grep string1 file.txt && grep string2 file.txt) && echo "This file is OK" || echo "I don't like this file"

答案 3 :(得分:0)

尝试使用以下内容:

grep 'word1\|word2\|word3' /path/to/file

或者也许在UNIX上:

grep -e pattern1 -e pattern2 /path/to/file
相关问题