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