在重定向的stdout / stderr *中替换“^ M”*

时间:2017-02-22 14:17:44

标签: linux bash shell

我有一个发出“^ M”字符的脚本,并希望在运行时用UNIX回车替换它们。目前,我将其输出和错误重定向到如下文件:

bash my_script.sh > my.log 2>&1

我知道我可以使用tr来执行替换tr '\r' '\n',但我只知道如何使用静态文本文件执行此操作,并且我希望在命令完成之前检查输出日志运行。如何通过重定向动态更换?

编辑:脚本需要将stdout stderr重定向到日志。

3 个答案:

答案 0 :(得分:2)

bash my_script.sh |& stdbuf -oL tr '\r' '\n' > my.log

答案 1 :(得分:2)

bash stdoutstderr|& \r都有tr的简写。只需删除bash script.sh |& tr '\r' '\n' > my.log stdbuf -oL

的字符
tr

此外,您可以根据需要禁用输出缓冲,方法是执行insert into .. select ...,然后在它之后使用create view v_event_by_day_2016 as -- this is the complete query from your MVIEW select ...; create table event_by_day_2016 as select * from v_view_one; alter table event_by_day_2016 inherit event_by_day; alter table event_by_day_2016 add constraint check (...); 命令。

答案 2 :(得分:2)

这是适合您的事情:

bash myscript.sh | sed -u 's/\r/\n/' > my.log 2>&1

这将在命令运行时动态替换并仍然写入日志文件。

从sed手册页:

-u, --unbuffered
load minimal amounts of data from the input files and flush the output buffers more often