最近写了一个shell脚本,为了简化工作中的一个繁琐的操作。
Windows系统编辑的文本文件放到Linux系统上通常会出现令人厌烦的”^M”。这是因为Windows下的换行是”\r\n”,而Linux下是”\n”。
为了消灭这些令人烟花缭乱的^M,我之前的方法是借助于vim的”%s/^M//g”(^M使用Ctrl+ v + m键入)命令。
工作中有这玩意儿的文件很多。这文件一多了,每个文件都要vim打开文件、输入命令、保存退出。额,所有文件都改完了,晚上睡觉手底下放个键盘,估计睡着了都能把这套命令给打出来,-_-!。
这么折腾了几次后,我终于决定不能再忍,要借助工具来做这项繁琐、重复、手酸的工作,于是我想到了shell。shell下有很多高效强大的命令,借助几种命令的组合,就能完成我的需求。
于是,如下的shell脚本诞生了:
#!/bin/bash
find $1 -type f ! -name $(basename $0) ! -name file_list > file_list
while read line
do
cat ${line} | sed 's/^M//g' > ${line} # 这里的^M依旧是用Ctrl + v + m键入。
done < file_list
rm -f file_list
简单说明一下。思路很简单:
1、我要知道要修改哪些文件。
2、一个一个来,获取文件内容。
3、把其中的^M全部“咔嚓”掉。
4、把干净清爽的文件内容重新写回文件。
5、还有谁?!如果有人回答,就回到第2步。
于是第3行的find命令,就是在指定目录下查找所有待修改的文件,将查询结果存储在file_list文件中。在查找过程中,要排除shell脚本本身以及存放查询结果的文件。
用cat命令读出文件内容,传递给sed让它去“咔嚓”^M,之后将清爽的文件内容重写入源文件。
while循环中,”done < file_list”的写法就是一个一个文件来的意思。
最后删除掉中间文件file_list,清理现场,★_★。
自从写了这个脚本,手不酸了,手不疼了,手也不抽筋儿了,神清气爽,不要太爽哦!