1.1 功能说明
为处理大量的字符串而定义的一套规则和方法
一般以行为单位处理的
1.2 符号说明
常用:
符号 |
说明 |
^ |
以...开头,例如:^oldboy,以oldboy开头 |
$ |
以...结尾,例如:oldboy$,以oldboy结尾 |
^$ |
表示空行 |
. |
只能代表任意一个字符 |
\ |
转义字符号,例如:\.,代表.本身 |
* |
重复0个或多个前面的一个字符 |
.* |
匹配所有任意一个字符 |
[abc] |
匹配[]里的包含abc的任意字符 [a-zA-Z0-9] |
[^abc] |
匹配[]里不包含abc的任意字符 |
a\{n,m\} |
匹配重复a的n到m次 |
a\{n, \} |
匹配重复a至少n次 |
a\{n \} |
匹配重复a的n次 |
a\{,n \} |
匹配重复a至多n次 |
扩展:
符号 |
说明 |
+ |
匹配重复前面一个字符的“1个或1个以上” |
? |
匹配重复前面一个字符的“0个或1个” |
| |
表示同时过滤多个字符 |
() |
分组过滤,后向引用 |
1.3 实践操作
通用例子:
[root@ben-test ~]# cat -n aa.txt
1 aa
2 bb
3
4
5 cc
6 I LIKE you
7 access bike
8 0000
实例1-1 .的使用例子
匹配aa.txt任意一个字符,空行没有字符,故不显示
[root@ben-test ~]# grep -n "." aa.txt
1:aa
2:bb
5:cc
6:I LIKE you
7:access bike
8:0000
实例1-2 [abc]的使用例子
匹配aa.txt中的ay字符
[root@ben-test ~]# grep "[ay]"aa.txt
aa
I LIKE you
accessbike
实例1-3 [^abc]的使用例子
匹配aa.txt中不含ay字符的内容
[root@ben-test ~]# grep "[^ay]" aa.txt
bb
cc
I LIKE you
access bike
0000
实例1-4 匹配aa.txt中0的字数
[root@ben-test ~]# grep "0\{3\}"aa.txt
0000
[root@ben-test ~]# grep "0\{1,3\}"aa.txt
0000
[root@ben-test ~]# grep "0\{3,\}"aa.txt
0000
[root@ben-test ~]# grep "0\{,3\}"aa.txt
aa
bb
cc
I LIKE you
access bike
0000
实例1-5 ?的使用例子
[root@ben-test ~]# grep -E "ac?"aa.txt
aa
accessbike
[root@ben-test ~]# grep -E "aac?" aa.txt
aa
实例1-6 |的使用例子
[root@ben-test ~]# grep -E "you|bi"aa.txt
I LIKE you
access bike
实例1-7 ()的使用例子
1、取出ifconfig eth0中的ip地址
[root@ben-test ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr00:0C:29:2B:45:3E
inet addr:192.168.137.10 Bcast:192.168.137.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2b:453e/64 Scope:Link
UPBROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RXpackets:11385 errors:0 dropped:0 overruns:0 frame:0
TXpackets:6854 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RXbytes:1088920 (1.0 MiB) TX bytes:884216(863.4 KiB)
[root@ben-test ~]# ifconfig eth0 |sed -nr's#^.*dr:(.*) Bc.*$#\1#gp'
192.168.137.10
2、取出644字符串
[root@ben-test ~]# stat aa.txt
File:`aa.txt'
Size:39 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 134363 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-11-15 00:34:08.845000977 +0800
Modify: 2016-10-26 22:38:44.419903187 +0800
Change: 2016-10-26 22:38:44.419903187 +0800
[root@ben-test ~]# stat aa.txt |sed -nr's#^.*\(0(.*)/-.*$#\1#gp'
644
2、把/etc/passwd文件中的第一列和最后一列调换
[root@ben-test ~]# head -1 /etc/passwd |sed -nr's#(^.*)(:.*:)(/.*$)#\3\2\1#gp'
/bin/bash:/root:root:x:0:0:root
等同于:
[root@ben-test ~]# head -1 /etc/passwd |sed -nr's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp'
/bin/bash:x:0:0:root:/root:root
思路:使用()取出对应的第1列和第7列,其他列为一个(),第1列和第7列对应输出的\1和\3调换