【问题标题】:Unable to remove carriage returns无法删除回车
【发布时间】:2011-02-18 08:43:29
【问题描述】:

您好!

我的任务是针对我们从硬件供应商处收到的文件创建一份报告。我需要为两个字段 'Test_Version' 和 'Model-Manufacturer' grep 这些文件;对于每个字段,我需要捕获它们对应的值。

previous post 中,我找到了创建基本报告的帮助,如下所示:

    find . -name "*.VER" -exec egrep -A 1 'Test_Version=|Model-Manufacturer:' {} ';' 

Model-Manufacturer:^M
R22-100^M
Test_Version=2.6.3^M
Model-Manufacturer:^M
R16-300^M
Test_Version=2.6.3^M

但是,输出的数据充满了 DOS 回车“^M”。我的老板希望“Model-Manufacturer”显示为“Test_Version”,即

Model-Manufacturer:R22-100
Test_Version=2.6.3
Model-Manufacturer:R16-300
Test_Version=2.6.3

使用 sed,我尝试删除“Model-Manufacturer”的“^M”字符,但无济于事:

find . -name "*.VER" -exec egrep -A 1 'Test_Version=|Model-Manufacturer:' {} ';' | sed 's/Model-Manufacturer:^M//g'

此命令无效。我在这里错过了什么?

【问题讨论】:

    标签: sed


    【解决方案1】:

    试试这个:

    sed '/Model-Manufacturer:/s/\r//g'
    

    如果您也有换行符并且想要将这两行合并为一条,则可以使用上一个问题的答案中显示的一种技术。

    【讨论】:

      【解决方案2】:

      如果有的话,您可以使用dos2unix 删除回车符。或者使用tr

      tr -d '\r' < file
      

      【讨论】:

      • 使用tr,我从命令行成功:find . -name "*.VER" -exec egrep -A 1 'Test_Version=|Model-Manufacturer:' {} ';' &gt; tmp1 ; tr -d '^M' &lt;tmp1&gt;tmp2。但是,bash 脚本中的相同命令不会执行任何操作!!!我想我要疯了!救命!
      【解决方案3】:

      如果你使用 Bash 作为你的 shell,或者在 vi 中创建脚本,你应该可以这样做:

      sed -e 's///g'

      删除 CR。

      Ctrl-V(键盘上的按键)按字面意思插入下一个按键,Ctrl-M 是回车。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-13
        • 2010-10-22
        • 2013-10-17
        • 2012-10-05
        • 2015-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多