Linux Bash中if语句的grep 2个单词
我正在尝试查看我的nohup文件是否包含我要查找的单词。如果有,那么我需要把它放到tmp文件中 因此,我目前正在使用: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,正则表达式替换运算符由\\\
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声明的内部,真的很抱歉我得到了它。我放错了反斜杠