2016-01-21 47 views
1

为了确定我的安装是否有我应该注意到的错误,我在文件上使用grep命令并使用tee写入文件,因为我需要提升权限。grep和tee在安装过程中识别错误

sudo grep -inw ${LOGFOLDER}/$1.log -e "failed" | sudo tee -a ${LOGFOLDER}/$1.errors.log 
sudo grep -inw ${LOGFOLDER}/$1.log -e "error" | sudo tee -a ${LOGFOLDER}/$1.errors.log 

问题是即使grep没有找到任何东西,该文件也会被创建。 有没有什么办法可以创建文件,只有当grep找到了匹配项?

... | sudo awk "{print; print \$0 >> \"errors.log\";}" 

但AWK的这些特征是很少使用:

感谢

回答

0

您可以用awk取代tee,如果有什么可以写它不会创建文件。如果没有找到,我宁愿删除空的错误文件:

test -s error.log || rm -f error.log 

而且,顺便说一句,你可以同时用grep多个单词:

grep -E 'failed|error' ... 
+0

非常感谢。另外对于用grep多词搜索的建议:) – user1902346

+0

谢谢。多次搜索完成:sudo grep -E“failed | error”-inw $ {LOGFOLDER}/$ 1.log并且工作得很好。 awk命令返回错误信息:sudo grep -E“failed | error”-inw $ {LOGFOLDER}/$ 1.log | sudo awk“{print; print $ 0 >>'$ {LOGFOLDER}/$ 1.errors.log';}” 返回:awk:cmd。行:1:{print; print -bash >>'errors.log';} awk:cmd。行:1:表达式 awk:cmd中的^ invalid char'''。行:1:{print; print -bash >>'errors.log';} awk:cmd。行:1:^语法错误 – user1902346

+0

引号需要转义:'“{print; print \ $ 0 >> \”$ {LOGFOLDER}/$ 1.errors.log \“;}” – gudok