替换dos2unix行结尾

时间:2013-01-20 01:43:21

标签: unix sed awk find

我使用以下代码替换dos2unix行结尾。每次执行代码时,它都会在命令提示符下卡住。以下命令有什么问题?

for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do    sed -i 's/\r//' $i ; done

2 个答案:

答案 0 :(得分:2)

在Ubuntu中,dos2unixunix2dos分别实现为todosfrodos。它们在tofrodos包中提供。

我建议使用

find . -type f \( -name "*.c" -o -name "*.h" \) -print0 | xargs -0 frodos

答案 1 :(得分:0)

我建议您确认您的find命令和for循环正常工作。

您只需使用echo语句打印每个文件的名称即可。

根据您的平台(以及您拥有的 .c .h 文件的数量),您可能需要使用 xargs 而不是直接操纵find的输出。很难说,因为你还没有告诉我们你在哪个平台上。

此外,根据您的平台,不同版本的 sed -i 选项的工作方式不同。

有时你必须指定用于备份文件的文件扩展名,有时你不需要。

以上所有是我建议逐件测试你的命令的原因。

您应该阅读试图在您尝试使用它的系统上尝试使用的每个命令的手册页。

关于命令的 sed 部分,您应该在单个文件上测试它以确保它有效。

您可以使用以下sed命令修复换行符:

sed 's/^M$//' input.txt > output.txt

您可以输入 CTRL v CTRL m

键入^M

就像我之前说的那样,-i选项在不同平台上的工作方式不同。

如果您无法正常工作,可以让sed输出一个新文件,然后再覆盖原始文件。

在你的for循环中这很简单。