1
grep string1 file1.txt | grep -q string2
if [ $? == 0 ]; then
    echo "both string1 and 2 found"
else
    echo "either or both missing"
fi

我需要在 file1.txt 的同一行中找到 string1 和 string 2,有没有更好的方法来写这个或者这已经很好了?感谢所有帮助,我是 shell 编程的新手。

4

3 回答 3

2

您可以使用

grep -e "string1.*string2" file1.txt

只要您期望 string2 排在第二位并且没有重叠

或者,通过管道输入 grep 的 grep 是标准方法。也许使用变量

result=`grep string1 file1.txt | grep string2`
if [ `echo "$result"|wc -w` == 0 ];then
  echo "a"
else
  echo "b"
fi
于 2013-10-23T00:27:51.917 回答
2

如果订单无关紧要,它已经很好了,但是您可以将其缩短为:

grep string1 file1.txt | grep -q string2 && echo found || echo not found

于 2013-10-23T00:32:59.767 回答
0

通常,仅$?当您需要将其与几个不同的值进行比较时才需要使用。在这种情况下,您只关心 0-vs-non-zero,因此只需运行语句本身grep中的命令。if

if grep string1 file1.txt | grep -q string2; then
    echo "both string1 and 2 found"
else
    echo "either or both missing"
fi
于 2013-10-23T01:48:37.627 回答