我一直试图解决这个问题,但无论我尝试什么,似乎并没有像我想的那样工作。基本上缺少的是grep在找到匹配项时没有列出文件名(我认为这是-H标志应该做什么?)并且uuencode似乎不想附加文件电子邮件。我已经尝试了uuencode和cat,我无处可去。
有人知道这里可能出现什么问题吗?
for i in `ls SystemOut_*[0-9].log`; do
grep -inEH '^\[.*(error|exception)' $i >> scannedErrors.txt;
mv "$i" "${i%.log}"_scanned.log;
done
if [[ -s scannedErrors.txt ]]; then
uuencode scannedErrors.txt | mailx -s "Scanned Logfile Errors" someone@somewhere.com < Message.txt;
fi
/bin/rm scannedErrors.txt;
答案 0 :(得分:0)
uuencode scannedErrors.txt
期待输入 - 当仅使用一个选项调用时,它将该选项视为要包含在输出中的文件的名称,而不是要读取的文件的名称。因此,cat scannedErrors.txt | uuencode scannedErrors.txt
或uuencode scannedErrors.txt scannedErrors.txt
。
我不一定认为grep
位有任何问题,但在cat scannedErrors.txt
放置可能会有用,以确保找到你想要的东西。您也可以执行grep ... SystemOut_*[0-9].log
而不是for循环,这会使-H
成为默认值,但您可能仍需要for循环来重命名,除非您恰好拥有{{1可用的脚本(允许通过正则表达式进行创意重命名的perl脚本)。
答案 1 :(得分:0)
尝试:
{ cat scannedErrors.txt|uuencode scannedErrors.txt;cat Message.txt;}|mailx -s "Scanned Logfile Errors" someone@somewhere.com
因为|之间存在冲突和&lt;