shell脚本之文本三剑客(grep)详解

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次匹配,少了不限制
qp
()将括号里面的内容看作是一个整体

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值