grep用法
标签(空格分隔): 未分类
grep, egrep, fgrep
grep: 根据模式搜索文本,并将符合模式的文本行显示出来。
Pattern: 文本字符和正则表达式的元字符组合而成匹配条件
grep [options] PATTERN [FILE…]
-i 忽略大小写
–color 匹配到的高亮显示
-v: 显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
grep正则表达式:REGular EXPression, REGEXP
元字符:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:
[:digit:]数字字符, [:lower:]小写字母, [:upper:]大写字母,
[:punct:]标点符号, [:space:]空白字符, [:alpha:]所有字母,
[:alnum:]所有数字字母
grep '[[:digit:]]$' /etc/inittab
grep '[0-9]$' /etc/inittab
匹配次数(贪婪模式):*
*
*: 匹配其前面的字符任意次
.*: 任意长度的任意字符
?: 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{1,\} 至少一次,多了不限
\{0,3\} 可以没有,最多3次
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首 grep ‘^a’ test
$: 锚定行尾,此字符前面的任意内容必须出现在行尾 grep ‘b$’ test
^$: 空白行
\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
cat /etc/passwd |grep '\<root'
>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现
cat /etc/passwd |grep 'nologin\>'
\<root\> root必须为单词
分组:
\(\)
\(ab\)*
ab可以出现0次一次任意次
后向引用
\1: 引用第1个左括号以及与之对应的右括号所包括的所有内容
\2:引用第2个左括号以及与之对应的右括号所包括的所有内容
\3:引用第3个左括号以及与之对应的右括号所包括的所有内容
[root@localhost test]# cat test.txt
He love his lover.
She like his lover.
He like his liker.
She love his liker.
[root@localhost test]# cat test.txt | grep '\(l..e\).*\1'
He love his lover.
He like his liker.
egrep及扩展正则表达式
grep:使用基本正则表达式定义的模式来过滤文本的命令;
-E: 使用扩展正则表达式
-A #: 匹配到的行下面#行也显示
-B #: 匹配到的行上面#行也显示
-C #: 匹配到的行上下#都显示
扩展正则表达式:
次数匹配:
+:前面字符至少一次 = (1,)
{m,n} :扩展正则表达式不用加”\”
位置锚定同上
分组:
():分组
\1, \2, \3, …
或者
|: or
C|cat: C或cat
(C|c)at:Cat 或cat
grep -E = egrep
[root@localhost test]# cat /etc/ssh/ssh_config | grep -E “^[[:space:]]+”
开头至少有一个空白行
[root@localhost test]# ifconfig | egrep -o '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
[root@localhost test]#ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
192.168.30.49
255.255.255.0
192.168.30.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255