我试图查看我的nohup文件是否包含我要查找的单词。如果是,那么我需要把它放到tmp文件中。
所以我目前正在使用:
if grep -q "Started|missing" $DIR3/$dirName/nohup.out
then
grep -E "Started|missing" "$DIR3/$dirName/nohup.out" > tmp
fi
但即使有我想要的单词,它也永远不会进入if语句。
我该如何解决这个问题?
答案 0 :(得分:1)
由于基本sed使用BRE
,因此正则表达式交替运算符由\|
表示。 |
与文字|
符号相匹配。而且您无需触及使用|
的grep中的ERE
符号。
if grep -q "Started\|missing" $DIR3/$dirName/nohup.out
答案 1 :(得分:1)
您应该使用egrep
代替grep
(Avinash Raj已经在他的回答中解释过了)。
我通常建议使用egrep
作为日常使用的默认设置(即使许多表达式只包含基本的正则表达式语法)。从实际角度来看,标准grep
仅出于性能原因而感兴趣。
有关grep
与egrep
的优势的详细信息,请参见superuser question。
答案 2 :(得分:0)
当你只将grep结果放入tmp文件时,你不想两次grep文件。
你不能使用
egrep "Started|missing" $DIR3/$dirName/nohup.out > tmp
因为在没有找到任何内容时会创建一个空的tmp文件。
您可以使用if [ ! -s tmp ]
删除空文件或使用其他解决方案:
重新定位grep结果而不再使用grepping可以使用
完成rm -f tmp 2>/dev/null
egrep "Started|missing" $DIR3/$dirName/nohup.out | while read -r strange_line; do
echo "${strange_line}" >> tmp
done