grep 命令

-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-w: 作为整个单词进行匹配
-o : 只显示匹配内容
-c :显示匹配行数

grep "^[a-zA-Z]" pgm.s

显示 pgm.s 文件中以字母开头的所有行

grep -r ‘energywise’ *
#在当前目录及其子目录下搜索'energywise'行的文件
grep -l -r ‘energywise’ *     
#在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件
grep -n 't[ae]st' regular_express.txt
#字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,如下
grep -n '[^g]oo' regular_express.txt
#假设我 oo 前面不想要有小写字节,所以,我可以这样写 [^abcd....z]oo , 
#但是这样似乎不怎么方便,由於小写字节的 ASCII 上编码的顺序是连续的
grep -n '[^a-z]oo' regular_express.txt
#当我们在一组集合字节中,如果该字节组是连续的,例如大写英文/小写英文/数字等等,
# 就可以使用[a-z],[A-Z],[0-9]等方式来书写,那么如果我们的要求字串是数字与英文呢?
#就将他全部写在一起,变成:
[a-zA-Z0-9]
#如果我想要让 the 只在行首列出呢? 这个时候就得要使用定位字节了
grep -n '^the' regular_express.txt

^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!

#行尾结束为小数点 (.) 的那一行:
grep -n '\.$' regular_express.txt
#找出空白行:
grep -n '^$' regular_express.txt

. (小数点):代表『一定有一个任意字节』的意思
* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态

#找出 g??d 的字串,亦即共有四个字节, 起头是 g 而结束是 d
grep -n 'g..d' regular_express.txt
#当我们需要『至少两个 o 以上的字串』时,就需要 ooo*
grep -n 'ooo*' regular_express.txt
#找出 g 开头与 g 结尾的行,当中的字符可有可无
grep -n 'g.*g' regular_express.txt
#想要找出『任意数字』的行?因为仅有数字,所以就成为
grep -n '[0-9][0-9]*' regular_express.txt

限定连续重复字符的范围 { }
. * 只能限制0个或多个, 如果要确切的限制字符重复数量,就用{范围} 。范围是数字用,隔开 2,5 表示2~5个,
2表示2个,2, 表示2到更多个
注意,由于{ }在SHELL中有特殊意义,因此作为正则表达式用的时候要用/转义一下。

搜索包含两个o的字符串的行
grep -n 'o/{2/}' regular_express.txt 
搜索g后面跟2~5个o,后面再跟一个g的字符串的行。
grep -n 'go/{2,5/}g' regular_express.txt 
搜索包含g后面跟2个以上o,后面再跟g的行。。
grep -n 'go/{2,/}g' regular_express.txt 
#去除 空白行和行首为 #的行
grep -v '^$' regular_express.txt | grep -v '^#'
#使用支持扩展正则表达式的 egrep 与扩展特殊符号 | ,会方便许多
egrep -v '^$|^#' regular_express.txt 
grep -E "[1-9]+"
或
egrep "[1-9]+"
打印样式匹配所位于的字符或字节偏移:
echo gun is not unix | grep -b -o "not"
7:not
#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 -b -o 一般总是配合使用。

这里列出几个扩展特殊符号:

+, 于 . * 作用类似,表示 一个或多个重复字符。
?, 于 . * 作用类似,表示0个或一个字符。
|,表示或关系,比如 'gd|good|dog' 表示有gd,good或dog的串
(),将部分内容合成一个单元组。

比如 要搜索 glad 或 good 可以这样 'g(la|oo)d'。
()的好处是可以对小组使用 + ? * 等。比如要搜索A和C开头结尾,中间有至少一个(xyz) 的串,可以这样 : 'A(xyz)+C'

在grep搜索结果中包括或者排除指定文件:
#只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}

#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"

#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist


参考:
https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html
http://man.linuxde.net/grep

你可能感兴趣的:(grep 命令)