4

一个非常常见的问题,但我无法使用 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

4

3 回答 3

11

^M不是字面意思^M。替换^M\rtr您可以对;使用相同的表示。这两个命令都删除回车:

tr -d '\r'  < input.txt > output.txt
sed -e 's/\r//g' input.txt > output.txt
于 2012-11-23T10:23:10.197 回答
1
sed -e 's/^M/d' myfile.txt

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

可能会对您有所帮助。

于 2012-11-23T10:31:20.113 回答
1

迟到了,但这里是为了后代:Linux 或 Unix 上的 sed Delete / Remove ^M Carriage Return (Line Feed / CRLF)

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

于 2016-12-05T09:36:00.453 回答