sed -e's / ^ M / d'不工作

时间:2012-11-23 10:18:28

标签: linux unix sed

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

但没有变化。我正在做一个基本的错误吗?请{I} sed表示我不好。

我发现了一个解决方案,即在vi编辑器中打开文件,在命令模式下执行:

    :set fileformat=unix
    :w

但我也想在sed中找到它。

2 个答案:

答案 0 :(得分:11)

^M不是字面^M。将^M替换为\r。您可以对tr使用相同的表示形式;这两个命令都删除了回车符:

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

答案 1 :(得分:1)

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

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

This可能对您有帮助。