Shell 脚本:如何将 Tee 命令与 sed 命令一起使用
Shell Script : How to use Tee command with sed command
之前:
main 2>&1 | tee -a $log_file;
这工作正常,但它在 $log_file 中抛出标准错误,如下所示。我要替换:
"ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)"
有:
"NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)"
我希望版本和日期采用正则表达式格式。
之后:
main 2>&1 | tee -a | sed -i 's|ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)|NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)|g' $log_file;
Error which are coming at downloading time
Few lines coming at the end(The lines are jumbled)
您应该明确您的需求,现在很难阅读您的代码。
这里有两个选项:
- 在保存到你的日志文件之前,你得到了主流并替代了他
- 你在最后格式化你的日志文件
第一个选项
我无法测试,但是,它应该是这样的:
main 2>&1 | SED COMMAND | tee -a $log_file
第二个选项
已测试,有效。
sed -i "s/ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)/NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)/g" $log_file
由于 -i 选项,Sed 将编辑内联指定的文件。
正则表达式
如果你想通过NOTE来改变所有的ERROR,那么,你应该只使用这个sed命令
sed -i "s/ERROR/NOTE/g" $log_file;
如果您想更具体一点,请查看此答案:using SED with wildcard
你能试试这个吗;
main 2>&1 | sed "/ERROR.*[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}-[0-9]\{3\}.*20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}.*(stderr)/ s/ERROR/INFO/" | tee -a $log_file
要查找版本,正则表达式;
[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}-[0-9]\{3\} :
要查找日期,正则表达式:例如 (2015-02-02_12-17-08)
20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}
如果日期是 2015-12-03 11.37.25,你应该使用
20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}.[0-9]\{2\}.[0-9]\{2\}
之前:
main 2>&1 | tee -a $log_file;
这工作正常,但它在 $log_file 中抛出标准错误,如下所示。我要替换:
"ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)"
有:
"NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)"
我希望版本和日期采用正则表达式格式。
之后:
main 2>&1 | tee -a | sed -i 's|ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)|NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)|g' $log_file;
Error which are coming at downloading time
Few lines coming at the end(The lines are jumbled)
您应该明确您的需求,现在很难阅读您的代码。
这里有两个选项:
- 在保存到你的日志文件之前,你得到了主流并替代了他
- 你在最后格式化你的日志文件
第一个选项
我无法测试,但是,它应该是这样的:
main 2>&1 | SED COMMAND | tee -a $log_file
第二个选项
已测试,有效。
sed -i "s/ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)/NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)/g" $log_file
由于 -i 选项,Sed 将编辑内联指定的文件。
正则表达式
如果你想通过NOTE来改变所有的ERROR,那么,你应该只使用这个sed命令
sed -i "s/ERROR/NOTE/g" $log_file;
如果您想更具体一点,请查看此答案:using SED with wildcard
你能试试这个吗;
main 2>&1 | sed "/ERROR.*[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}-[0-9]\{3\}.*20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}.*(stderr)/ s/ERROR/INFO/" | tee -a $log_file
要查找版本,正则表达式;
[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}-[0-9]\{3\} :
要查找日期,正则表达式:例如 (2015-02-02_12-17-08)
20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}
如果日期是 2015-12-03 11.37.25,你应该使用
20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}.[0-9]\{2\}.[0-9]\{2\}