最近,因为要在IAR上移植contiki操作系统,除了各种报错之外还有一大堆warning,看着不爽。发现waning的原因基本上都一样:Warning[Pa050:] non-native end of line sequence detected 。因为,contiki的源码是在linux下用gcc编译的,每个文件的换行符和windows下的换行符不同。于是我将这些warning信息保存在一个文件中,比如log.txt,想在linux下写一个shell脚本,用unix2dos命令将这些换行符改成windows下的形式。
log.txt文件中的内容为:
观察一下还是有规律的:每一行数据都以“:”为分隔符分为3个字段:Warning[Pa050]、warning的信息、warning对应的文件路径。对我来说有用的就是最后一个字段,文件路径。下面开始:
先获取文件路径
[buptlsl@MyCentos Desktop]$ cat log.txt |awk 'FS=":"{print $3}'
结果为:
我想要的部分是contiki\core\lib\random.h这种格式,所以还要处理一下
把contiki之前的部分和random.h之后的部分都去掉
[buptlsl@MyCentos Desktop]$ cat log.txt |awk 'FS=":"{print $3}'|sed 's/^.*lsl_01//g'|sed 's/ .*$//g'
sed 's/ .*$//g表示把每一行从文件名之后的部分去掉结果:
\contiki\core\contiki-net.h
\contiki\core\net\rime\announcement.h
\contiki\core\contiki-version.h
\contiki\core\sys\autostart.h
\contiki\core\contiki-version.h
\contiki\core\contiki-net.h
\contiki\core\contiki-version.h
\contiki\core\contiki-version.h
\contiki\core\net\rime\channel.h得到需要的文件路径了,保存成log2.txt
下面只需要写一个for循环
for file in `cat log2.txt`
do
unix2dos $file
done
结果,发现报错,原来问题出在路径上:在windows下路径分隔符为\,而在linux下为/,所以还需要把log2.txt中所有的\替换为/
sed -i 's/\\/\//g'
注意,\和/都为特殊字符,要用转义符转义,即“\\”表示“\”,“\/”表示“/”。