Ubuntu 字符替换命令

前端之家收集整理的这篇文章主要介绍了Ubuntu 字符替换命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一 将当前目录及子目录下,文件名含有"tct"的字符全部替换为"wt",例如:
tct_title.xml 替换后:wt_title.xml

rename -v 's/tct/wt/' `find ./ -name "*tct*"`


二 将当前目录及子目录下,文件内容含有"tct"的字符全部替换为"wt",且排除搜索.git目录


sed -i "s/tct/wt/g" `grep "tct" -rl ./ -R --exclude-dir=.git`
若不需要排除.git目录,则写成:

sed -i "s/tct/wt/g" `grep "tct" -rl ./`




rename -v 's/tct/wt/' `find ./ -name "*tct*"`
rename -v 's/Tct/Wt/' `find ./ -name "*Tct*"`
rename -v 's/TCT/WT/' `find ./ -name "*TCT*"`

sed -i "s/tct/wt/g" `grep "tct" -rl ./ -R --exclude-dir=.git`
sed -i "s/Tct/Wt/g" `grep "Tct" -rl ./ -R --exclude-dir=.git`
sed -i "s/TCT/WT/g" `grep "TCT" -rl ./ -R --exclude-dir=.git`

====================

使用grep搜索目录时,会将一些隐藏目录也给搜进去,比如.git目录。如何在使用时排除这些目录呢?

使用--exclude-dir选项。

语法

--exclude-dir=DIRExclude directories matching the pattern DIR from recursive searches.

单个目录示例

grep -E "http"  ./ -R --exclude-dir=.git

多个目录示例

grep -E "http"  . -R --exclude-dir={.git,res,bin}

多个文件示例

附赠一个,排除扩展名为 java 和 js 的文件

grep -E "http"  . -R --exclude=*.{java,js}

太罗嗦,用ack吧。源码搜索的不二之选~默认排除各种版本库,可以指定多种源文件类型。

ack-grep 自动忽略repository和binary的folder。搜索source code非常棒。


grep的两个替代品(补充?)


GREP是我很常用的命令,尤其在浏览代码时,可以用它来搜索一个变量/函数在哪些文件里面被引用了。

  • GREP command: How to use -http://unixshare.blogspot.com/2011/11/grep-command-how-to-use.html(需番强)
  • grep everything -http://noone.org/blog/English/Computer/Shell/grep%20everything.html
  • @H_404_180@

    但grep有一些不爽的地方,这两天看到了两个跟grep类似的东东,可以在一定场景弥补grep的不足,甚至是替代它。

    ACK

    http://betterthangrep.com/

    ack的广告词是“better than grep,a source code search tool for programmers”,它旨在解决grep用在写代码时的诸多不爽:

    1. 排除一些不需要搜索文件/目录

    在写代码时,我们常常会有.svn,.cvs这些目录,还有 foo~,#foo#这些临时文件/备份文件,以及一些二进制文件。要在grep命令行排除这些目录,是很麻烦的的,因为传统grep并没有这个能力,而是要结合find来使用:

    grep pattern $(find . | -v .svn | -v .cvs | egrep -v '~$' | egrep -v '^#' )

    这不仅很繁琐,而且在文件很多时会因命令过长而出错。如果是在Windows系统上就相当让人抓狂了(是的,你可以用一个msys或者cygwin提供的bash来作为shell,以便它支持上述复杂的shell命令,但调用其它Windows程序的地方又悲剧了)。

    而ack的解决办法很简单:把这些东西内置到程序里,搜索自动忽略这些文件

    2. 让grep只搜索某些类型的文件,但要求搜索子目录

    grep可以搜索子目录(用-R选项),但这种情况下你就不能再指定文件类型,所以传统的方法也是结合find来折腾:

    pattern $(find . -name '*.pl' -or -name '*.pm' '*.pod' | -v .svn)

在GNU grep 2.5版本上,你可以用--include=PATTERN --exclude=PATTERN这两个选项来过滤文件类型:

-R pattern --include= --include= --exclude=.svn

这个命令行也挺长,而且你得有个GNU grep >= 2.5。

ack的解决思路是:1)缺省就搜索子目录;2)对常用编程语言,ack里面写好了对应哪些文件扩展名,比如perl是.pl,.pm和.pod,那么你只要指定按perl这个语言搜就行了。于是上述命令可以简化为:

ack --perl pattern

如果只想排除perl类型的文件,则可以用:

ack --noperl pattern

你可以--type-add TYPE=.ext[,ext2[,...]]或者--type-set TYPE=.ext[,...]]来临时定制文件类型(如果要长期使用,可以修改~/.ackrc。

同时,也许你已经注意到了,其实ack也可以用来替代那一大堆find命令,用来搜索指定类型的文件本身(而不是文件内容),ack当然也支持,只需要添加-f 选项就行了:

ack -f --perl

ack的其它特点