grep -(global search regular expression(RE) and print out the line
,全面搜索正则表达式并把行打印出来)
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
或 -R
表示递归搜索-n
显示行号-w
表示匹配整个单词-l
(小写 L)只显示包含匹配文本的文件名除此之外,还可以使用 --exclude
、--include
、--exclude-dir
等标志进行更有效的搜索:
只搜索扩展名为 .c 或 .h 的文件:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
排除扩展名为 .o 的文件:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
排除 dir1/、dir2/ 和所有匹配 *.dst/ 的目录:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
-a 不要忽略二进制数据。
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-c 计算符合范本样式的列数。
-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-G 将范本样式视为普通的表示法来使用。
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i 忽略字符大小写的差别。
-l 列出文件内容符合指定的范本样式的文件名称。
-L 列出文件内容不符合指定的范本样式的文件名称。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-s 不显示错误信息。
-v 反转查找。
-w 只显示全字符合的列。
-x 只显示全列符合的列。
-y 此参数效果跟“-i”相同。
-o 只输出文件中匹配到的部分。
grep -A 20 'chopper=' http.txt
grep -C 20 'chopper=' http.txt
grep -in "post" http.txt
例如,查找fun时,找到了一堆function
关键字,如果想将其去掉,可以使用-v:
grep -n fun http.txt | grep -v 'function'
[abc] :表示“a”或“b”或“c”
[0-9] :表示 0~9 中任意一个数字,等价于[0123456789]
[\u4e00-\u9fa5] :表示任意一个汉字
[^a1<] :表示除“a”、“1”、“<”外的其它任意一个字符
[^a-z] :表示除小写字母外的任意一个字符
例如查找“tast”或者“test”两个字符串:
root@kali:~# grep -n 't[ae]st' regular.txt
8:I can't finish the test.
9:Oh! The soup taste good.
查找不包含“#”的字符串
root@kali:~# grep -n '[^#]' regular.txt
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
4:this dress doesn't fit me.
5:However, this dress is about $ 3183 dollars.
6:GNU is free air not free beer.
7:Her hair is very beauty.
8:I can't finish the test.
查找字符“oog”,如果不想要“oog”字符前面有 g,则查找[^g]oog
,同理,查找[^go]oog
是指字符“oog”前面不能为 g 或者 o。
$ grep -n 'oog' regular_express.txt
$ grep -n '[^g]oog' regular_express.txt
$ grep -n '[^go]oog'regular_express.txt
如果想只查找行首为“the”的字符行,则使用以下命令:
$ grep -n '^the' regular_express.txt
查找行首为大写字母的所有行:
^[A-Z]
表示以大写字母开头。
[^A-Z]
表示除了大写字母 A-Z 的所有字符。
grep -n '^[A-Z]' regular_express.txt
查找以 d 字母结尾的行:
grep -n 'd$' regular_express.txt
^word 表示带搜寻的字符串(word)在行首
word$ 表示带搜寻的字符串(word)在行尾
.(小数点) 表示 1 个任意字符
\ 表示转义字符,在特殊字符前加\会将特殊字符意义去除
* 表示重复 0 到无穷多个前一个 RE(正则表达式)字符
[list] 表示搜索含有 l,i,s,t 任意字符的字符串
[n1-n2] 表示搜索指定的字符串范围,例如[0-9] [a-z] [A-Z]等
[^list] 表示反向字符串的范围,例如[^0-9]表示非数字字符,[^A-Z]表示非大写字符范围
\{n,m\} 表示找出 n 到 m 个前一个 RE 字符
\{n,\} 表示 n 个以上的前一个 RE 字符