Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换dos2unix行结束符_Unix_Sed_Awk_Find - Fatal编程技术网

替换dos2unix行结束符

替换dos2unix行结束符,unix,sed,awk,find,Unix,Sed,Awk,Find,我使用以下代码替换dos2unix行结尾。每次执行代码时,它都会卡在命令提示符下。下面的命令有什么问题 for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do sed -i 's/\r//' $i ; done 我建议确认find命令和for循环工作正常 您只需使用echo语句打印每个文件的名称就可以做到这一点 根据您的平台(以及有多少.c和.h文件),您可能需要使用xargs,而不是直接操作find的输出。很难说,因

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

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

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

您只需使用echo语句打印每个文件的名称就可以做到这一点

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

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

有时必须指定备份文件的文件扩展名,有时则不必指定

以上所有这些都是我建议逐个测试您的命令的原因

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

关于命令的sed部分,您应该在单个文件上测试它,以确保它正常工作

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

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

您可以通过键入CTRLv CTRLm来键入
^M

正如我之前所说的,
-I
选项在不同平台上的工作方式不同

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


这在for循环中非常简单。

在Ubuntu中,
dos2unix
unix2dos
分别实现为
todos
frodos
。它们可在软件包
tofrodos
中找到

我建议使用

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

为什么不直接使用
dos2unix
命令呢?您在哪个平台上?根据答案,您可能想使用xargs…@jahroy-我在ubuntu上安装了dos2unix,但每次运行时都会显示“未找到dos2unix命令”,听起来您要么没有安装,要么安装不正确。@jahroy-这是一个打字错误……您能建议除dos2unix之外的其他方式吗