使用shell批量修改文件

我们经常有一些批量修改文件的需求,例如在很多文件里把某个字段替换成另外一些字段,或者在文件的某处添加一行。这些需求可以使用shell脚 本中的find和sed命令轻松实现。

批量替换关键字

/bin/find . -type f -name  "*.org" -execdir sed -i -e 's/<code>/#+BEGIN_SRC/g' '{}' \;

find . -type f -name  "*.org" -execdir sed -i -e 's/\/wiki\//\/work\//g' '{}' \;

find . -type f -name  "*.org" -execdir sed -i -e 's/\.\/blog\//\/blog\//g' '{}' \;

由于windows下也有find命令,所以如何你是使用cygwin, 最好使用find的绝对路径来调用它。上面的例子是把<code>替换成#+BEGIN_SRC. -e后面的参数是正则表达式,有些符号需要转义符才能表示它本身,具体请参看 正则表达式需要转义的特殊字符

在某行前添加一行

find . -type f -name  "*.jsp" -execdir sed -i -e '/<\/www:body>/i\<!--  JSP file :'{}' -->' '{}' \;

我以前遇到过这样的一个问题,就是我们的项目有很多jsp文件,新来的同事不知道如何把浏览器中看到的页面和jsp对应起来,我想到的一个办法是 把jsp的名字加到jsp的代码中,这样,同事在浏览器中通过查看html源代码就可以找到jsp的名字。但是,现在的jsp的文件里都没有加jsp文件名, 如果手工去添加的话就太麻烦了,而且还可能出错。

上面的脚本就可以轻松完成修改。它在body结束前,把一段标明jsp文件名的注释插入到jsp文件中。

从文件中删除关键字

find . -type f -name  "pom.xml" -execdir sed -i -e '/-SNAPSHOT/d' '{}' \;

上面的脚本把pom.xml文件中版本号里的snapshot去除,这个在发布某个版本的时候很有用。

利用shell命令去除dos文件里的回车符——“^M”

tr -d '\r' < dos.txt > unix.txt

批量改名字

在文件中查找内容

find . -name "*.el" -exec grep -H "org-defvaralias" {} \;

Comments

comments powered by Disqus