一个非常常见的问题,但我无法用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
中找到它。
答案 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可能对您有帮助。