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\}