将该文件中的CR / LF行终止符转换为Unix风格的LF行终止符?

时间:2014-12-13 13:10:23

标签: unix

请帮忙。对于这个Unix类,我需要在下午4点之前将其打开。昨晚7点以来我一直在努力。避风港睡了这项任务分为三个部分。我只需要最后一部分的帮助。如果我不能完成这个,我就失败了。

第3阶段

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

转换 fileName

然后应该将该文件中的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 如果所有三个脚本都正常工作,您将收到访问代码。

我的尝试:

#!/bin/sh
for file in "$@"  do
     if file "$file" | grep "ASCII text, with CRLF"; then
     echo "converting $file"
     sed -e s/[\\r\\n]//g "$file"
 fi    
done

结果:

    ./asciiFix.sh: 3: ./asciiFix.sh: Syntax error: "if" unexpected (expecting "do")
    aardvark.cpp /home/cs252/Assignments/scriptAsst/winscrubbed.dat differ: byte 50, line 1

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

我曾经尝试过取出。我试过sed -i' s / ^ 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'

3 个答案:

答案 0 :(得分:1)

您在;之前忘记了dodo算作新的陈述。或者,您可以将do放在新行上。在我看来,将DOS行结尾(CRLF)转换为Unix行结尾(仅限LF)的最舒适方式是dos2unix。如果您修复了;错误,则使用dos2unix代替sed应该是直截了当的。

答案 1 :(得分:1)

感谢您的帮助。 最终起作用的代码是:

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

答案 2 :(得分:0)

自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