Linux学习之shell编程应用

来源:互联网 发布:淘宝账号查询购买记录 编辑:程序博客网 时间:2024/06/06 00:02

最近,因为要在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'

注意,\和/都为特殊字符,要用转义符转义,即“\\”表示“\”,“\/”表示“/”。


0 0
原创粉丝点击