一. 查找文本
1.使用grep
查找
如果你想在当前目录下查找hello,world!
字符串,可以这样:
grep -rn "hello,world!" *
*
: 表示当前目录所有文件,也可以是某个文件名
-r
是递归查找
-n
是显示行号
-R
查找所有文件包含子目录
-i
忽略大小写
下面是一些有意思的命令行参数:
-
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
-
grep -l pattern files :只列出匹配的文件名,
-
grep -L pattern files :列出不匹配的文件名,
-
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配
magic
,而不是magical
), -
grep -C number pattern files :匹配的上下文分别显示[number]行,
-
grep pattern1 | pattern2 files :显示匹配
pattern1
或pattern2
的行, -
grep pattern1 files | grep pattern2 :显示既匹配
pattern1
又匹配pattern2
的行。
这里还有些用于搜索的特殊符号:
\<
和 \>
分别标注单词的开始与结尾。
例如:
grep man *
会匹配 Batman
、manic
、man
等,
grep '\<man' *
匹配manic
和man
,但不是Batman
,
grep '\<man\>'
只匹配man
,而不是Batman
或manic
等其他的字符串。
'^'
:指匹配的字符串在行首,
'$'
:指匹配的字符串在行尾,
2. xargs
配合grep
查找
find -type f -name '*.php'|xargs grep 'GroupRecord'
这个比较常用, 意思是在当前目录下查询php文件,然后再过滤GroupRecord
二. 批量替换文本
在vi
或者vim
模式下使用,语法如下:
%s/a/w/g
其中s为:substitute,%表示所有行,g表示global
示例
%s/data/devicelog/g
将data
替换成devicelog
,注意如果有/
,需要转义\/