grep命令
命令简介
grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
命令语法
grep [OPTION]... PATTERN [FILE]...
命令选项
--color=auto : 对匹配到的文本着色显示-v : 显示不被pattern匹配到的行-i : 忽略字符大小写-n: 显示匹配的行号-c : 统计匹配的行数-o : 仅显示匹配到的字符串-q : 静默模式,不输出任何信息-A # : after, 后#行-B # : before, 前#行-C #: context, 前后各#行-e : 实现多个选项间的逻辑or关系-w : 匹配整个单词-E : 相当于egrep,使用扩展的正则表达式-F : 相当于fgrep,不支持正则表达式,搜索速度快
示例
root@centos7 ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin [root@centos7 ~]# grep -vc "root" /etc/passwd29 [root@centos7 ~]# grep -o "root" /etc/passwdrootrootrootroot[root@centos7 ~]# grep -C 2 "core id" /proc/cpuinfo
physical id : 0siblings : 2core id : 0cpu cores : 2apicid : 0--physical id : 0siblings : 2core id : 1cpu cores : 2apicid : 1grep与正则表达式
正则表达式(REGEXP)又分为基本正则表达式(BRE)和扩展正则表达式(ERE)
基本正则表达式
1.字符匹配
. 匹配任意单个字符[] 匹配指定范围内的任意单个字符[^] 匹配指定范围外的任意单个字符[:alnum:] 字母和数字[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z[:lower:] 小写字母 [:upper:] 大写字母[:blank:] 空白字符(空格和制表符)[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)[:digit:] 十进制数字 [:xdigit:]十六进制数字[:graph:] 可打印的非空白字符[:print:] 可打印字符[:punct:] 标点符号
2.次数匹配(贪婪模式:尽可能长的匹配)
* 匹配前面的字符任意次,包括0次.* 任意长度的任意字符\? 匹配其前面的字符0或1次\+ 匹配其前面的字符至少1次\{n\} 匹配前面的字符n次\{m,n\} 匹配前面的字符至少m次,至多n次\{,n\} 匹配前面的字符至多n次\{n,\} 匹配前面的字符至少n次
3.位置锚定
^ 行首锚定,用于模式的最左侧$ 行尾锚定,用于模式的最右侧^PATTERN$ 用于模式匹配整行,其中 ^$ 表示空行,^[[:space:]]*$ 表示空白行\< 或 \b 词首锚定,用于单词模式的左侧\> 或 \b 词尾锚定;用于单词模式的右侧\匹配整个单词
4.分组和后向引用
\(string\) :将string作为一个整体方便后面引用\1 :引用第1个左括号及其对应的右括号所匹配的内容\2 :引用第2个左括号及其对应的右括号所匹配的内容...\n :引用第n个左括号及其对应的右括号所匹配的内容
5.或者
\|,例如a\|b表示a或b,C\|cat表示C或cat, \(C\|c\)at表示Cat或cat
扩展正则表达式
注意grep要使用扩展的正则表达式要加-E选项,或者直接使用egrep
1.字符匹配
跟正则表达式一样
2.次数匹配(贪婪模式:尽可能长的匹配)
* 匹配前面的字符任意次,包括0次 (与基本正则表达式一样)
.* 任意长度的任意字符 (与基本正则表达式一样)? 匹配其前面的字符0或1次 (跟基本正则表达式相比没有 \)+ 匹配其前面的字符至少1次 (跟基本正则表达式相比没有 \){n} 匹配前面的字符n次 (跟基本正则表达式相比没有 \){m,n} 匹配前面的字符至少m次,至多n次 (跟基本正则表达式相比没有 \){,n} 匹配前面的字符至多n次 (跟基本正则表达式相比没有 \){n,} 匹配前面的字符至少n次 (跟基本正则表达式相比没有 \)3.位置锚定
跟基本正则表达一样
4.分组和后向引用
(string) :将string作为一个整体方便后面引用 (跟基本正则表达相比没有 \)\1 :引用第1个左括号及其对应的右括号所匹配的内容\2 :引用第2个左括号及其对应的右括号所匹配的内容...\n :引用第n个左括号及其对应的右括号所匹配的内容
5.或者
|(跟基本正则表达式相比没有 \),例如a|b表示a或b,C|cat表示C或cat, (C|c)at表示Cat或cat
示例
1. 取出rhel或centos系统的主版本号
[root@centos7 ~]# grep -o "[0-9]\+" /etc/redhat-release | head -17
2. 取出网卡ens33的ip地址
[root@centos7 ~]# ifconfig ens33 | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -1192.168.249.70
3. 显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
[root@centos7 ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
4. 找出/etc/passwd中的两位或三位数
[root@centos7 ~]# grep -o '\<[[:digit:]]\{2,3\}\>' /etc/passwd
5 .使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@centos7 ~]# echo /etc/rc.d/init.d/functions | egrep -o '[^/]+/?$'functions
6 .使用取出/etc/rc.d/init.d/functions中其目录名
[root@centos7 ~]# echo /etc/rc.d/init.d/functions | egrep -o "^.*/"/etc/rc.d/init.d/