grep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep:有三大家族成员
(1):grep: 支持基本的正则表达式
(2):egrep:支持扩展正则表达式
(3):fgrep:不支持使用正则表达式
1.grep语法
用法: grep [选项]... PATTERN [FILE]...
2.grep主要参数
-E, --extended-regexp PATTERN is an extended regular expression
#等于egrep,扩展grep
-G, --basic-regexp PATTERN is a basic regular expression (default)
#模式是基本的正则表达式(默认)
-e, --regexp=PATTERN 用 PATTERN 来进行匹配操作
-f, --file=FILE 从 FILE 中取得 PATTERN
-i, --ignore-case 忽略大小写
-w, --word-regexp 强制 PATTERN 仅完全匹配字词
-x, --line-regexp 强制 PATTERN 仅完全匹配一行
-z, --null-data 一个 0 字节的数据行,但不是空行
-A 如果匹配成功,则将匹配行及其后n行一起打印出来
-B 如果匹配成功,则将匹配行及其前n行一起打印出来
-C 如果匹配成功,则将匹配行及其前后n行一起打印出来
-n 显示行号
-o 只显示匹配内容
-q 静默模式
-c 如果匹配成功,将匹配到的行数打印出来
杂项:
-s, --no-messages 不显示错误信息
-v, --invert-match 选中不匹配的行
-V, --version 显示版本信息并退出
--help 显示此帮助并退出
3.egrep的用法
egrep的用法和grep的用法非常相似,可以说egrep是加强版的grep,可以支持更多的正则表达式的元字符集。
扩展正则表达式的元字符表
| + | 对前一项进行1次或多次匹配 |
|---|---|
| ? | 对前一项进行0次或1次匹配 |
| {j} | 对前一项进行j次匹配 |
| {j,} | 对前一项进行至少j次匹配,多了不限制 |
| {,k} | 对前一项进行至多k次匹配,少了不限制 |
| q | p |
| () | 将括号里面的内容看作是一个整体 |
4.grep命令使用复杂实例
- (1)找出/proc/meminfo文件中,所有以大写或小写s开头的行
[root@bogon ~]# cat /proc/meminfo | grep -i ^s.*
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 8876 kB
Slab: 104716 kB
SReclaimable: 39532 kB
SUnreclaim: 65184 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
- (2)找出"ldd /usr/bin/cat"命令的结果中的文件路径,且显示行号
[root@bogon ~]# ldd /usr/bin/cat
linux-vdso.so.1 (0x00007ffcee1c2000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe88fee3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe8904ae000)
[root@bogon ~]# ldd /usr/bin/cat | grep -n /lib64/
2: libc.so.6 => /lib64/libc.so.6 (0x00007f9330648000)
3: /lib64/ld-linux-x86-64.so.2 (0x00007f9330c13000)
- (3)查看/etc/passwd文件中占有root字符有几行
[root@bogon ~]# cat /etc/passwd | grep root -c
2
- (4)查看/etc/passwd文件中含有root
[root@bogon ~]# grep 'ro\{1,2\}t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
- (5)打印匹配/etc/passwd中有root,打印匹配的行后三行
[root@bogon ~]# grep -A 3 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
- (6)打印匹配/etc/passwd中有chen,打印匹配的行前三行
[root@bogon ~]# grep -B 3 'chen' /etc/passwd
rngd:x:992:988:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
nginx:x:991:987:Nginx web server:/var/lib/nginx:/sbin/nologin
chen:x:1000:1000::/home/chen:/bin/bash
- (7)匹配/etc/passwd中字符root,且只显示root
[root@bogon ~]# grep -o 'chen' /etc/passwd
chen
chen
- (8)匹配/etc/passwd中含有root,并且打印行号
[root@bogon ~]# grep -c 'root' /etc/passwd
2

16

被折叠的 条评论
为什么被折叠?



