我正在使用以下代码替换 dos2unix 行尾。每次我执行代码时,它都会卡在命令提示符下。下面的命令有什么问题?
for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do sed -i 's/\r//' $i ; done
在 Ubuntu 中,dos2unix
和unix2dos
分别实现为todos
和frodos
。它们在包装中提供tofrodos
。
我建议使用
find . -type f \( -name "*.c" -o -name "*.h" \) -print0 | xargs -0 frodos
我建议确认您的 find 命令和 for 循环正常工作。
您可以通过简单地使用 echo 语句来打印每个文件的名称来做到这一点。
根据您的平台(以及您拥有多少.c和.h文件),您可能需要使用xargs而不是直接操作 find 的输出。很难说,因为你还没有告诉我们你在哪个平台上。
此外,根据您的平台,不同版本的sed与-i选项的工作方式不同。
有时您必须指定用于备份文件的文件扩展名,有时您不必这样做。
以上所有都是我建议逐个测试您的命令的原因。
您应该阅读您尝试在您尝试使用它的系统上使用的每个命令的手册页。
关于命令的sed部分,您应该在单个文件上对其进行测试以确保其有效。
您可以使用以下 sed 命令来修复换行符:
sed 's/^M$//' input.txt > output.txt
您可以^M
通过键入CTRLv CTRLm
正如我之前所说,该-i
选项在不同平台上的工作方式不同。
如果你无法让它工作,你可以 sed 输出一个新文件,然后覆盖原始文件。
在您的 for 循环中执行此操作非常简单。