Bash脚本在文本文件中搜索多个字符串

时间:2019-08-08 06:57:35

标签: bash shell grep

我创建了一个脚本来搜索文本文件中的字符串,并输出带有该字符串的所有行:

    #!/bin/sh
STRING=$1
FILE=dsat.txt
if grep -q $STRING $FILE;
  then
        echo -e "$(grep $STRING $FILE)\n"
else
        echo "Not found"
        exit 0
fi

我想对此进行扩展,在文本文件中我有多个细节,例如

Word1 Word2 - Word3 Word4 Word5
Word1 Word6 Word3 Word7 Word8

在搜索中,我搜索“ Word1 Word3”

我希望它在搜索用例与此行匹配时仍输出这些行。

使用grep可以吗?

更新:

    #!/bin/sh
FILE=text.txt
STRING='$1'

grep "$(sed 's/  */\\|/g' <<<"$1")" $FILE

因此,当我运行脚本时,我会执行script.sh Word1 Word2,但它似乎也不会搜索word2 谢谢

2 个答案:

答案 0 :(得分:2)

直到我理解您的问题,您是说匹配多个模式吗?

如果这是您要的内容,

grep 'A B\|A B C' file

将使用A BA B C打印所有行。 |用于this pattern | or this pattern。它需要反斜线。 对于不带反斜杠的使用,您可以提供-E标志。

更新:

假设您将所有单词存储在words中,

grep "$(sed 's/  */\\|/g' <<<"$words")" file

答案 1 :(得分:0)

grep -f从文件读取几种模式