linux在多文件中查找关键词的位置以及替换关键词的方法

一次编译u-boot时有个错误做不到nand_readd.o,本来应该找nand_read.o才对的,我用find -iname "nand_readd.*" 没有找到这个文件我想应该是关键此错误我就找,文件太多找不到,我在网上一查用了这个指令:

grep -r --include=*.h -o --include=*.cpp -o --include=*.c

其中-R, -r, --recursive
              Read  all files under each directory, recursively; this is equivalent to the -d
              recurse option.

结合实际:

grep -r --include=*.* nand_readd ~/u-boot/

很快就找到了

或者:

全文搜索

:vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim进行多文件跳转定位。
使用方法:vimgrep 正则表达式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望递归搜索,可以使用**/*,表示搜索所有的文件。
:cl 列举结果
:cc(正常模式下使用命令) 当前结果
:cn(正常模式下使用命令) 下一个结果
:cp(正常模式下使用命令) 上一个结果
:cw(正常模式下使用命令) 重新打开搜索结果窗口

 

linux多文件替换关键字的方法
现在网上这样的方法只有两种,一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下:
  一、Mahuinan法:
  用sed命令可以批量替换多个文件中的字符串。sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
  例如:我要把/root/tm/ 目录下的.txt文件中的 /home/gbase/table_space替换为/home/hj/gbase/table_space,
  执行命令:
sed -i "s/home\/gbase\/table_space/ \ /home\/hj\/gbase\/table_space /g" `grep home\/gbase\/table_space -rl /root/tm/*.txt`
  这是目前linux最简单的批量替换字符串命令了! 举个例子,比方说我要将uboot代码中原先移植的飞凌2440所有文件中FL2440替换成天嵌的TQ2440,直接上图片:
 
  www.2cto.com 
  具体格式如下:
   sed -i "s/oldString/newString/g" `grep oldString -rl /path`
注:如果字符串中有/时,就需要在前面加一个\ ,进行转义。
  实例代码:
  sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
  sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
  二、Sumly法
  执行命令:
  perl -p -i -e "s/China/Sumly/g" /www/*.htm /www/*.txt
  上面的意思是说将www文件夹下所有的htm和txt文件中的“China”都替换为“Sumly”
  三、30T法
  执行命令:  www.2cto.com 
  perl -pi -e 's|baidu|30T|g' `find /www -type f`
  上面的意思是说将www文件夹下所有文件,不分扩展名,所有的“baidu”都替换为“30T”
///
sed -i "s/JSON/JSONYH/g" `grep JSON -rl ../src`
sed -i "s/CONFIG::pad/CONFIG::pad_tmp/g" `grep CONFIG::pad -rl ./`
GameConfig
PayWindow
 

你可能感兴趣的:(它山之石篇)