Linux Bash中if语句的grep 2个单词

Linux Bash中if语句的grep 2个单词,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我正在尝试查看我的nohup文件是否包含我要查找的单词。如果有,那么我需要把它放到tmp文件中 因此,我目前正在使用: if grep -q "Started|missing" $DIR3/$dirName/nohup.out then grep -E "Started|missing" "$DIR3/$dirName/nohup.out" > tmp fi 但它永远不会出现在if语句中,即使有我正在寻找的单词 如何解决此问题?由于基本sed使用BRE,正则表达式替换运算符由\\\

我正在尝试查看我的nohup文件是否包含我要查找的单词。如果有,那么我需要把它放到tmp文件中

因此,我目前正在使用:

if  grep -q "Started|missing" $DIR3/$dirName/nohup.out
then
  grep -E "Started|missing" "$DIR3/$dirName/nohup.out" > tmp
fi
但它永远不会出现在if语句中,即使有我正在寻找的单词


如何解决此问题?

由于基本sed使用
BRE
,正则表达式替换运算符由
\\\\
表示<代码>与文字符号相匹配。而且您不需要在使用
ERE
的grep中触摸
|
符号

if grep -q "Started\|missing" $DIR3/$dirName/nohup.out

你应该使用
egrep
而不是
grep
(Avinash Raj已经在他的回答中解释了这一点)

我通常建议使用
egrep
作为日常使用的默认值(即使许多表达式只包含基本的正则表达式语法)。从实用的角度来看,标准
grep
仅出于性能原因才令人感兴趣


有关
grep
egrep
的优点的详细信息,请参见。

当您只将grep结果放入tmp文件时,您不希望将该文件grep两次。
你不能使用

egrep "Started|missing" $DIR3/$dirName/nohup.out > tmp
因为这将在找不到任何内容时创建一个空的tmp文件。 您可以使用
if[!-s tmp]
删除空文件,或使用其他解决方案:

重新定向grep结果而不重新进行grep可以使用

rm -f tmp 2>/dev/null
egrep "Started|missing" $DIR3/$dirName/nohup.out | while read -r strange_line; do
   echo "${strange_line}" >> tmp
done

它仍然不在if声明的内部,真的很抱歉我得到了它。我放错了反斜杠