使用' GREP'在文档内搜索多个字符串

时间:2017-06-27 12:16:49

标签: bash shell

我正在尝试在word文档中搜索具有特定文本的字符串。到目前为止,我已经弄清楚如何在此文档中搜索单个字符串,并在使用以下脚本找到此文本时返回消息。我现在面临的挑战是弄清楚如何在这个文档中搜索两个字符串中的任何一个。

我知道如何使用' grep'来编写此脚本。命令?

1 - 在文档内搜索匹配的字符串。

#!/bin/bash
FILE="document.doc"
ISSUE_1="Identifies inactive services"
if grep -c "$ISSUE_1" $FILE
then
    echo "There is an Issue"
else
    echo "There is NO Issue"
fi

2 - 在文档中搜索多个字符串。

#!/bin/bash
FILE="document.doc"
ISSUE_1="Identifies inactive services"
ISSUE_2="Determines the percentage CPU idle time"
if [[grep -c "$ISSUE_1" $FILE]] || [[grep -c "$ISSUE_2" $FILE]]
then
    echo "There is an Issue"
else
    echo "There is NO Issue"
fi

2 个答案:

答案 0 :(得分:4)

如果您有一个字符串列表,最简单的可能是将它们放在一个文件中,并使用-fgrep让它从文件中读取一个模式列表。例如,创建一个名为patterns

的文件
Identifies inactive services
Determines the percentage CPU idle time

然后使用grep之类的

grep -f patterns -c "$FILE"

如果你不想要一个单独的文件,grep实际上需要一个模式,而不是(必然)一个固定的字符串,并且该模式可以or|:< / p>

grep -c "$ISSUE_1\|$ISSUE_2" "$FILE"

虽然如果您只是想知道是否找到任何匹配项,您不需要计算并检查该值,grep会告诉您其退出状态,因此您可以使用{{1}抑制输出

-q

如果要查看匹配的实际字符串,可以使用if grep -q -f patterns "$FILE"; then echo "At least one match" else echo "No matches" fi 仅输出与其中一个模式匹配的行的部分。例如:

-o

grep -f patterns -o "$FILE"

另外,您通常应避免使用大写字母作为变量名称。所有上限均适用于系统环境变量,应用程序为encouraged to use lowercase names

  

POSIX.1-2008的Shell和Utilities卷中的实用程序使用的环境变量名称仅由大写字母,数字和可移植字符集中定义的字符中的('_')组成,并且不以一个数字。实现可以允许其他字符;申请应容忍此类名称的存在。大写和小写字母应保留其独特的身份,不得折叠在一起。包含小写字母的环境变量名称的名称空间保留给应用程序。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为。

答案 1 :(得分:1)

您可以多次使用-e

if grep -e issue1 -e issue2 file ; then
    do_something
fi