Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6535
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 52
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-02 15:49
文章分类
文章存档

2014年(4)

我的朋友
^M

分类: C/C++

2014-12-23 21:58:44

最近写了一个shell脚本,为了简化工作中的一个繁琐的操作。
    Windows系统编辑的文本文件放到Linux系统上通常会出现令人厌烦的”^M”。这是因为Windows下的换行是”\r\n”,而Linux下是”\n”

为了消灭这些令人烟花缭乱的^M,我之前的方法是借助于vim”%s/^M//g”(^M使用Ctrl + v + m键入)命令。

工作中有这玩意儿的文件很多。这文件一多了,每个文件都要vim打开文件、输入命令、保存退出。额,所有文件都改完了,晚上睡觉手底下放个键盘,估计睡着了都能把这套命令给打出来,-_-!

这么折腾了几次后,我终于决定不能再忍,要借助工具来做这项繁琐、重复、手酸的工作,于是我想到了shellshell下有很多高效强大的命令,借助几种命令的组合,就能完成我的需求。

于是,如下的shell脚本诞生了:

点击(此处)折叠或打开

  1. #!/bin/bash
  2. find $1 -type f ! -name $(basename $0) ! -name file_list > file_list
  3. while read line
  4. do
  5. cat ${line} | sed 's/^M//g' > ${line} # 这里的^M依旧是用Ctrl + v + m键入。
  6. done < file_list
  7. 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,清理现场,★_★。

 
    自从写了这个脚本,手不酸了,手不疼了,手也不抽筋儿了,神清气爽,不要太爽哦!




阅读(265) | 评论(0) | 转发(0) |
0

上一篇:__linux

下一篇:L

给主人留下些什么吧!~~