Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Shell 使用egrep的Unix搜索模式_Shell_Unix_If Statement_Grep - Fatal编程技术网

Shell 使用egrep的Unix搜索模式

Shell 使用egrep的Unix搜索模式,shell,unix,if-statement,grep,Shell,Unix,If Statement,Grep,嗨,朋友们 我需要在一个文件中搜索两种模式。例:pattern1和pattern2,我想要的正是这个词。根据这个命令的成败,我将使用“IF”进行两个操作 例如 if(条件) 条件是评估用于在文件中搜索两个模式的命令。 只有在文件中找到这两种模式时,条件才应为true($?=0)。否则它就会失败 但是实际的egrep命令在模式之间执行或运行,我需要模式之间的逻辑。请帮帮我。逻辑上很模糊。如果您想检查文件中的两个模式,不管它们是否在同一行中,您可以这样做 grep 'pattern1' somefi

嗨,朋友们

我需要在一个文件中搜索两种模式。例:pattern1和pattern2,我想要的正是这个词。根据这个命令的成败,我将使用“IF”进行两个操作

例如

if(条件)

条件是评估用于在文件中搜索两个模式的命令。 只有在文件中找到这两种模式时,条件才应为true
($?=0)
。否则它就会失败


但是实际的
egrep
命令在模式之间执行或运行,我需要模式之间的逻辑。请帮帮我。

逻辑上很模糊。如果您想检查文件中的两个模式,不管它们是否在同一行中,您可以这样做

grep 'pattern1' somefile && grep 'pattren2' somefile
如果您希望两种模式出现在同一行中

grep 'pattern1' somefile | grep 'pattern2'

我想您可以在shell脚本中连接两个grep,如下所示:

#!/bin/bash

if egrep -q "pattern1" filename && egrep -q "pattern2" filename; then
  exit 0
else
  exit 1
fi

-q
确保没有来自
egrep
的输出(如果找到模式,它只会返回true),而
和&
确保只有在文件中找到两个模式时才会返回
退出0

您好,我已经解决了以下问题:

要求:在不同的线路上搜索两种不同的模式,并根据两种模式搜索的结果和操作采取行动

代码:

注意:两种图案在同一文件中的不同行上

egrep -z -q 'pattern1.*pattern2|pattern2.*pattern1'

如果文件中同时存在这两种模式,则返回true,否则返回false。

您可以发布您的egrep命令和模式吗?您好,这是我的脚本。#/bin/ksh echo“输入开始处理周期:”read START echo“输入结束处理周期:”read END if egrep-q“^$START$”example.txt&&egrep-q“^$END$”example.txt然后echo“VALID processing period”否则echo“INVALID processing period”fi--我的意图是使用单个egep(在一个命令中搜索两个模式)并将模式作为单词而不是子字符串。因此,我在模式的开头和结尾添加了“^”和“$symbol”。#!/bin/ksh echo”输入开始处理周期:“read START echo”输入结束处理周期:“read end if egrep-q”^$START$”example.txt&&egrep-q“^$end$”example.txt然后回显“有效处理期”否则回显“无效处理期”编辑您的问题并在代码块中插入脚本。它完全不可读。您好,谢谢您的回答。用于搜索特定单词(而不是作为子字符串)语法是在模式的开头加一个“^”,在它的结尾加一个“$”。也就是说…grep“^pattern1$”。我在脚本中把我的模式作为一个变量,它应该被用作$pattern1。你能告诉我如何指定“$”或不与我们在“”中指定的结尾“$”混淆吗?带单引号的值(“$pattern”)不是由shell扩展的,所以它是现有的。所以您的版本应该是
grep“^$pattern1\$”
。但是,有两件事-1.word是一个子字符串,2.您的模式将匹配整个字符串,因为
^
是字符串的开头,
$
是结尾。您好,谢谢..但我的要求是使用'egrep'并在其中搜索两个模式和条件…但这里您建议使用两个grep命令。您能帮忙吗p在这方面?当你认为你的问题得到回答时,请接受和/或向上投票,以便其他人知道哪个答案对你帮助最大。
egrep -z -q 'pattern1.*pattern2|pattern2.*pattern1'