grep(从文本或字符串种过滤特定内容。)
格式:Usage: grep [OPTION]... PATTERNS [FILE]...
常用选项:
-E 等价于 egrep 扩展正则
-i 忽略大小写
-w 匹配单词
-o 仅显示匹配内容
-r 递归匹配
-c 统计匹配的行数
-v 取反
-n 行号
-A n 后面n行
-B n 前面n行
-C n 前后多少行
文件格式:
第1列:城市位置编号。
第2列:月份。
第3列:存储代码及出库年份。
第4列:产品代号。
第5列:产品统一标价。
第6列:标识号。
第7列:合格数量。
file.txt文件内容:
48 Dec 3BC1977 LPSX 68.00 LVX2A 138
483 Sept 5AP1996 USP 65.00 LVX2C 189
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
1、含有“48”字符串的行的总数
#-c选项告诉grep只打印出匹配行的数量
[root@node1 ~]# grep -c '^48' file.txt
2、显示含有“48”字符串的所有行的行号
#-n选项告诉grep除了显示匹配的行之外,还要显示每一行的行号
[root@node1 ~]# grep -n '^48' file.txt
3、精确匹配只含有“48”字符串的行
#-w选项告诉grep只选择那些包含形成整个单词的匹配项的行
[root@node1 ~]# grep -w 48 file.txt
4、抽取代码为484和483的城市位置
[root@node1 ~]# grep '48[34]' file.txt
5、显示使行首不是4或8
#在正则表达式中,^符号代表行的开头。当它放在方括号[]内部时,它表示否定
[root@node1 ~]# grep '^[48]' file.txt
[root@node1 ~]# grep '^[^48]' file.txt
6、显示含有九月份(Sept)的行grep
[root@node1 ~]# grep -i 'sept' file.txt
7 显示以K开头,以D结尾的所有代码
#在正则表达式中,.符号通常表示任意字符(除了换行符),*符号表示前面的元素重复0次或多次。所以,.*表示任意数量的任意字符。
[root@node1 ~]# grep 'K.*D' file.txt
8、显示头两个是大写字母,中间两个任意,并以C结尾的代码
[root@node1 ~]# grep -E '[A-Z]{2}..C' file.txt
9、查询【存储代码及出库年份(第三列)】所有以5开始以1996或1998结尾的所有记录
[root@node1 ~]# grep '5.*199[68]' file.txt
10、显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行;
[root@node1 ~]# grep -i '^h' /etc/passwd
11、显示/etc/passwd中以sh结尾的行;
# $ 表示行尾
[root@node1 ~]# grep 'sh$' /etc/passwd
12、显示/etc/fstab中以 #开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
#在正则表达式中,[
:space:]
是一个预定义的字符类,它匹配任何空白字符[root@node1 ~]# egrep "^#[[:space:]]+[^[:space:]]*" /etc/fstab
13、查找/etc/rc.d/rc.local中包含“以to开始并以to结尾”的字串行;
[root@node1 ~]# egrep '(to).*\1' /etc/rc.d/rc.local
14、查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行;
[root@node1 ~]# egrep -w 's[a-z]*d' /etc/inittab
15、显示/var/log/secure文件中包含“Failed”或“FAILED”的行
[root@node1 ~]# grep -i 'Faild' /var/log/secure
16、在/etc/passwd中取出默认shell为bash
[root@node1 ~]# grep 'bash$' /etc/passwd
17、以长格式列出/etc/目录下以ns开头、.conf结尾的文件信息
[root@node1 ~]# ll /etc/ | grep '^.*/ns.*\.conf$'
18、匹配/etc/services中开头结尾字母一样的单词
root@node1 ~]# egrep -o -w "([a-z])[a-z]+\1" /etc/services