作者:Triste夏木_668_365 | 来源:互联网 | 2023-07-17 17:00
我们在Linux系统中进行shell开发时,有时候会因为文本源不同或语言不同的产物等原因造成文本读取存在一定的bug
比如文本解析出是乱码,这个时候要改字符集,eg:把gbk改成utf
比如windows的文本有错行,串字等,要把CRLF 改为UNIX
这里需要讲的是在逐行读取文本时,我们常用
for line in `cat xxx.log`;doecho ${line}
done
但是偶尔会出问题,今天我在做shell 调用 python运行产出的日志文件时,文件如下:
['20210312','ex',222,222,0]
['20210312','ex',224,223,1]
运行以上代码,会产生以下内容,我们无法进行下一步
['20210312',
'ex',
222,
222,
0]
['20210312',
'ex',
224,
223,
1]
分析原因可能是系统把这个文件内容分块处理,而不是分行处理
在搜索了文档之后,发现read line这个命令是用来专门获取文件行内容的,比for...cat...组合更专业,于是立马开始运行
cat xxx.log | while read line
do echo ${line}
done
成功
写在后面:我之前做所有的遍历读取文本操作基本上都是用的for循环,这次调试遇到bug方才知道程序具有多变性,平时注意多总结才是王道!