Linux文本三剑客---grep经典案例

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

Linux文本三剑客---grep经典案例_第1张图片

3、精确匹配只含有“48”字符串的行

#-w选项告诉grep只选择那些包含形成整个单词的匹配项的行

[root@node1 ~]# grep -w 48 file.txt

4、抽取代码为484和483的城市位置

[root@node1 ~]# grep '48[34]' file.txt

Linux文本三剑客---grep经典案例_第2张图片

5、显示使行首不是4或8

#在正则表达式中,^符号代表行的开头。当它放在方括号[]内部时,它表示否定

[root@node1 ~]# grep '^[48]' file.txt

Linux文本三剑客---grep经典案例_第3张图片

[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

Linux文本三剑客---grep经典案例_第4张图片

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

Linux文本三剑客---grep经典案例_第5张图片

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

你可能感兴趣的:(linux,运维)