【问题标题】:sed -e 's/^M/d' not workingsed -e 's/^M/d' 不工作
【发布时间】:2012-11-23 10:18:27
【问题描述】:

一个非常常见的问题,但我无法使用 sed 解决它。

我有一个脚本文件(一批命令)说myfile.txt 要立即执行以创建一个列表。现在,当我执行批处理操作时,我的命令行界面清楚地显示它无法将命令解析为换行符^M 在每一行的末尾加起来。

我认为sed 是最好的解决方法。我试过了:

    sed -e 's/^M/d' myfile.txt > myfile1.txt
    mv myfile1.txt myfile.txt

没有用。我也试过了,还是不行:

    sed -e 's/^M//g' myfile.txt > myfile1.txt
    mv myfile1.txt myfile.txt

然后我想可能是sed 将它作为行首的 M 字符,因此没有结果。所以我尝试了:

    sed -e 's/\^M//g' myfile.txt > myfile1.txt
    mv myfile1.txt myfile.txt

但没有变化。我在做一个基本的错误吗?请指教,因为我不擅长sed

我找到了一个解决方案,即在 vi 编辑器中打开文件并在命令模式下执行以下操作:

    :set fileformat=unix
    :w

但我也希望它在sed 中。

【问题讨论】:

  • 这不是你直接问的:dos2unix,除了sed,也是这样的。您的问题向我暗示您对此一无所知。 UNIX 有很多工具,这个工具非常单一。

标签: linux unix sed


【解决方案1】:

^M 并非字面意义上的^M。将^M 替换为\r。您可以对tr 使用相同的表示;这两个命令都删除回车:

tr -d '\r'  < input.txt > output.txt
sed -e 's/\r//g' input.txt > output.txt

【讨论】:

    【解决方案2】:
    sed -e 's/^M/d' myfile.txt
    

    具有以下含义[与/\^M/相同]:如果该行的第一个字母是M,则删除该行,否则打印并传递给下一个。。而且你必须在 s[search command] 中插入 2 个分隔符 /old/new/。

    This 可以帮到你。

    【讨论】:

      【解决方案3】:

      晚了,但为了后代:sed Delete / Remove ^M Carriage Return (Line Feed / CRLF) on Linux or Unix

      回答上述问题的要点:要获得 ^M,键入 CTRL+V 后跟 CTRL+M,即不要只键入克拉符号和大写 M。它不起作用

      【讨论】:

        猜你喜欢
        • 2019-09-03
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 2015-02-19
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        相关资源
        最近更新 更多