Shell脚本:如何使用sed命令使用Tee命令

时间:2016-10-14 12:12:16

标签: bash unix sed tee

在:

f

这样工作正常,但它在$ log_file中抛出stderr,如下所示。我想替换:

main 2>&1 | tee -a $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)"

Error which are coming at downloading time

Few lines coming at the end(The lines are jumbled)

2 个答案:

答案 0 :(得分:1)

你应该准确地确定你的需要,现在很难阅读你的代码。

这里有两个选项:

  • 在保存到日志文件之前,您已成为主流并将其替换为
  • 您最后格式化日志文件

第一个选项

我无法测试它,但它应该是这样的:

 <delivery-failure-params>
      <error-destination>ErrorQueue</error-destination>
      <redelivery-limit>0</redelivery-limit>
      <expiration-policy>Redirect</expiration-policy>
    </delivery-failure-params>

第二个选项

经测试,它有效。

main 2>&1 | SED COMMAND | tee -a $log_file

由于-i选项,Sed将编辑内联指定的文件。

<强> REGEX

如果您想通过注意更改所有 ERROR ,那么您应该只使用此sed命令

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

如果你想更具体一点,请看看这个答案:using SED with wildcard

答案 1 :(得分:0)

你能试试吗;

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