文件格式导致shell命令出错
今天发现了一个问题,对某个文件进行赋值之后,echo $i 是没有问题的 但是当我使用grep 或者awk 进行筛选的时候 发现出问题了,一开始用命令行,根本没任何错误输出,但就是匹配不到对应的数值,我决定用shell脚本 -x 看下情况,一看吓一跳,发现赋值出错了!
cat也是没发现问题的 vim进去之后:set invlist查看是否有多余字符,也是没有问题的
不使用变量单独进行筛选:
可以!!说明是变量有问题! 但是又没输出什么问题,只好写到shell里调试一下看看了
报错: grep $'VAG1_202008091623_001_0012_L1A\r' /root/tmp.txt
可以看出 是在获取参数的时候出了问题,将问题瞄准到参数对应的文件 OVS-1.txt
查看文件格式:
file OVS-1.txt
处理文件CRLF line terminators的问题:
因为这个文件是从windows下编辑然后拷贝到服务器上的。于是file文件的时候发现
OVS-1.txt: ASCII text, with CRLF line terminators
其中with CRLF line terminators 应该是windows生成文件时的不同。
估计是windows传过来的时候因为格式的问题在文本中有隐藏的字符。所以在查询结尾的时候无法得到结果。
转换:
dos2unix OVS-1.txt
查看:
file OVS-1.txt
OVS-1.txt: ASCII text
成功!