【问题标题】:how to delete the ^M from standard output and standard error如何从标准输出和标准错误中删除 ^M
【发布时间】:2014-07-10 09:45:33
【问题描述】:

我从 ksh 脚本运行 inventury.expect(期望脚本),

然后我将标准输出和标准错误传输到日志文件 - /tmp/VM.log

到目前为止一切都还好

  #!/bin/ksh

  .
  .
  .

  /var/tmp/inventury.expect 1>>  /tmp/VM.log 2>>  >>/tmp/VM.log


  .
  .
  .

但是当我查看日志文件时,我看到有分配的控制 M (^M)

所以我添加 tr 命令如下,以便从 standard out/err

中删除 ^M
  /var/tmp/inventury.expect 1>> | tr -d "^M" /tmp/VM.log 2>> | tr -d "^M"  >>/tmp/VM.log

但这似乎并不违法

我得到:(当我运行我的 ksh 脚本时)

  syntax error near unexpected token `|' ,    when I run the ksh script

请建议我们如何从标准输出和标准错误中删除 ^M ??

【问题讨论】:

    标签: linux shell ksh expect


    【解决方案1】:

    您使用tr 是正确的想法,但^M 不会指定要删除的字符。这些控制字符表示的是回车,您在 shell 中使用\r 指定。因此,将您对 tr -d "^M" 的使用替换为:

    tr -d '\r'
    

    将其放在期望脚本之后,将输出从tr 重定向到文件:

    /tmp/inventury.expect | tr -d '\r'  1>> /tmp/VM.log 2>> /tmp/VM.log
    

    【讨论】:

    • 所以我需要在管道之后添加 tr -d '/r' ?
    • 我得到同样的错误,也许是管道问题?
    • @maihabunash 我已经重写,希望更清晰。
    • 这根本不会影响stderr。
    【解决方案2】:

    我将语法设置为

      /var/tmp/inventury.expect | tr -d '\r' 1>> /tmp/VM.log  2>> /tmp/VM.log  
    

    这解决了^M

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多