Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用';在文档中搜索多个字符串;GREP';_Bash_Shell - Fatal编程技术网

Bash 使用';在文档中搜索多个字符串;GREP';

Bash 使用';在文档中搜索多个字符串;GREP';,bash,shell,Bash,Shell,我试图在word文档中搜索具有特定文本的字符串。到目前为止,我已经知道了如何在这个文档中搜索单个字符串,并在使用下面的脚本找到这个文本时返回一条消息。我现在面临的挑战是找出如何在文档中搜索两个字符串中的任何一个 你知道我如何使用“grep”命令编写这个脚本吗 1-在文档中搜索匹配字符串 #!/bin/bash FILE="document.doc" ISSUE_1="Identifies inactive services" if grep -c "$ISSUE_1" $FILE then

我试图在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

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

Identifies inactive services
Determines the percentage CPU idle time
然后使用
grep
like

grep -f patterns -c "$FILE"
如果您不需要单独的文件,
grep
实际上采用了一种模式,而不是(必要的)固定字符串,并且该模式可以使用
执行

grep -c "$ISSUE_1\|$ISSUE_2" "$FILE"
虽然如果您只想知道是否找到了匹配项,您不需要获取计数并检查该值,
grep
将告诉您其退出状态,因此您可以使用
-q
来抑制输出

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

grep -f patterns -o "$FILE"

另一方面,您通常应该避免在变量名中使用大写字母。所有CAP都是针对系统环境变量的,应用程序是

POSIX.1-2008的Shell和utilities卷中的实用程序使用的环境变量名称仅由大写字母、数字和可移植字符集中定义的字符中的(“"”)组成,且不以数字开头。实现可能允许使用其他字符;申请应允许存在此类名称。大写字母和小写字母应保持其唯一性,不得折叠在一起。包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为


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

Identifies inactive services
Determines the percentage CPU idle time
然后使用
grep
like

grep -f patterns -c "$FILE"
如果您不需要单独的文件,
grep
实际上采用了一种模式,而不是(必要的)固定字符串,并且该模式可以使用
执行

grep -c "$ISSUE_1\|$ISSUE_2" "$FILE"
虽然如果您只想知道是否找到了匹配项,您不需要获取计数并检查该值,
grep
将告诉您其退出状态,因此您可以使用
-q
来抑制输出

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

grep -f patterns -o "$FILE"

另一方面,您通常应该避免在变量名中使用大写字母。所有CAP都是针对系统环境变量的,应用程序是

POSIX.1-2008的Shell和utilities卷中的实用程序使用的环境变量名称仅由大写字母、数字和可移植字符集中定义的字符中的(“"”)组成,且不以数字开头。实现可能允许使用其他字符;申请应允许存在此类名称。大写字母和小写字母应保持其唯一性,不得折叠在一起。包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用此名称空间中的名称定义任何环境变量,而无需修改标准实用程序的行为


您只需多次使用
-e

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

您只需多次使用
-e

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

谢谢+1您将如何将匹配的特定字符串作为回显消息输出?@kieran_mol我已更新了答案,以显示如何输出匹配的字符串+1您将如何将匹配的特定字符串作为回显消息输出?@kieran_mol我已更新了答案,以显示如何输出匹配的字符串