有没有办法在ksh中grep 2个字符串,只有在找到字符串时才返回true?
如果找到任何字符串,我们可以使用egrep命令。但是为了匹配所有字符串并返回true,只显示所有字符串。
grep“string1”“sring2”file.txt无效。
请帮助。 提前谢谢。
编辑:
请注意,如果没有使用grep,我们可以使用其他选项。此外,第一个字符串出现在文件的第一行,而string2出现在文件的另一行中。
答案 0 :(得分:3)
你可以尝试
grep "string1.*string2" file
在此测试中,string1
必须在同一行的string2
之前才能生效。
或者你可以这样做:
grep string1 file | grep string2
如果找到string1
和string2
使用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