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
是否将该文件中的CR/LF行终止符转换为Unix样式的LF行终止符?_Unix - Fatal编程技术网

是否将该文件中的CR/LF行终止符转换为Unix样式的LF行终止符?

是否将该文件中的CR/LF行终止符转换为Unix样式的LF行终止符?,unix,Unix,请帮忙。我需要在下午4点之前把这个交给这个Unix类。我从昨晚7点就开始做了。我没睡。本作业分为三个部分。我只需要最后一部分的帮助。如果我不能完成这个,我就不及格 第三阶段 在同一目录中,编写一个脚本ascifix.sh,从命令行获取任意数量的文件路径,并对每个路径执行相同的分析。如果文件不是Windows ASCII,则脚本不应对其执行任何操作。对于每个Windows ASCII文件,脚本应打印消息 转换文件名 然后应将该文件中的CR/LF行终止符转换为Unix样式的LF行终止符 例如: cp

请帮忙。我需要在下午4点之前把这个交给这个Unix类。我从昨晚7点就开始做了。我没睡。本作业分为三个部分。我只需要最后一部分的帮助。如果我不能完成这个,我就不及格

第三阶段

在同一目录中,编写一个脚本ascifix.sh,从命令行获取任意数量的文件路径,并对每个路径执行相同的分析。如果文件不是Windows ASCII,则脚本不应对其执行任何操作。对于每个Windows ASCII文件,脚本应打印消息

转换文件名

然后应将该文件中的CR/LF行终止符转换为Unix样式的LF行终止符

例如:

cp ~cs252/Assignments/ftpAsst/d3.dat wintest.txt
./asciiFix.sh /usr/share/dict/words wintest.txt fileType.sh  
converting wintest.txt
and, after the script has finished, you should be able to determine that wintest.txt is now a     Unix ASCII file.
当您相信您的脚本可以正常工作时,请运行

~cs252/bin/scriptAsst.pl 如果这三个脚本都正常工作,您将收到访问代码

我的尝试:

#/垃圾箱/垃圾箱
对于“$@”中的文件,请执行以下操作
如果文件“$file”| grep“ASCII文本,带CRLF”;然后
echo“转换$file”
sed-es/[\\r\\n]//g“$file”
fi
完成
结果:

我已经试过了。我试过sed-i的/^M//g'$file“,也用过dos2unix,还有一些我不记得的东西。但它总是说这些文件的转换不正确

在加入;并切换到dos2unix:

#!/bin/sh
for file in "$@";
do
     if file "$file" | grep "ASCII text, with CRLF"; then
     echo "converting $file"
     dos2unix "$file"
 fi    
done
我现在得到的错误是:

dos2unix: converting file aardvark.cpp to Unix format ...

Failed when running: ./asciiFix.sh 'aardvark.cpp' 'bongo.dat' 'cat.dog.bak'

你忘了
之前执行
<代码>执行
计为新语句。或者,您可以将
do
放在新行上。在我看来,将DOS行结尾(CRLF)转换为Unix行结尾(仅LF)最合适的方法是dos2unix。如果您修复了
错误,使用
dos2unix
而不是
sed
应该是简单明了的。谢谢您的帮助。 最终起作用的代码是:

#!/bin/sh
for file in "$@";
do
    if file "$file" | grep -q "ASCII text, with CRLF"; then
        echo "converting $file"
        dos2unix "$file"
    fi
done

由于dos2unix 7.1,您可以使用dos2unix本身来测试CRLF。这样您就不局限于ASCII

#!/bin/sh
for file in "$@";
do
    if [ -n "$(dos2unix -ic $file)" ]; then
        echo "converting $file"
        dos2unix "$file"
    fi
done

下午4点。哪个时区,哈哈?(你还住在光盘上吗?)作业中包含一个不精确的术语“Windows ASCII”。ASCII是一个定义良好的字符集,但(通常)不是Windows上使用的字符集。这里的目的可能是西方Windows安装的默认字符集,但这绝不是唯一可能的解释。当然,看起来他们实际上只关心文件中的行尾,而不关心它使用哪一个ASCII超集。。。提示:正则表达式添加;帮了我一把,我换成了dos2Unix。但是,我仍然收到一个错误。请将此(或另一个)答案标记为已接受,以便此问题不再显示为未解决。谢谢
#!/bin/sh
for file in "$@";
do
    if [ -n "$(dos2unix -ic $file)" ]; then
        echo "converting $file"
        dos2unix "$file"
    fi
done