请帮忙。对于这个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'
答案 0 :(得分:1)
您在;
之前忘记了do
。 do
算作新的陈述。或者,您可以将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