从特殊字符的文件中断逐行读取?

时间:2016-08-17 11:13:08

标签: bash shell unix ksh

我想在Unix shell脚本中逐行读取文件。文件中的一行几乎可以包含任何类型和任意数量的字符。 到目前为止,我已经尝试了一个简单的阅读脚本

while read line
do
   echo $line
done < datafile

但是,如果我有一个尾随空格,这个脚本输出的部分行连接在一起,甚至是重复的。所以我把它修改为:

while IFS= read -r line; do
   echo $line
done < datafile

解决了这个问题,之后,它运行正常。但是当我遇到包含特殊字符的行 - 法语或德语特殊字符,中文,cyrilic等时 - 脚本最终再次连接和/或复制它们。

  

例如:

     

包含4个PDF的名称的文件(可以是任何内容   其他),因为它在控制台中用cat命令可见:

????????? ???.pdf 
AR_CLAIMS_BUBBLES.pdf
leur_compte__-_re??u_le.pdf
blomberg_RG62540.pdf
     

该文件的脚本输出为:

 ????????? ???.pdf   AR_CLAIMS_BUBBLES.pdf   blomberg_RG62540.pdf
 AR_CLAIMS_BUBBLES.pdf
 leur_compte__-_re??u_le.pdf   blomberg_RG62540.pdf
 blomberg_RG62540.pdf leur_compte__-_re??u_le.pdf

我不明白这是怎么回事,为什么会这样,但它似乎高度依赖于这些特殊的角色。该脚本仅在处理具有此类字符的行时出现故障(在控制台中显示为&#39;?&#39;)。

在这种情况下,我如何准确阅读各行?

注意:遗憾的是,无法提供文件的实际内容,因为我只能通过控制台访问Unix系统。

0 个答案:

没有答案