`

ma系列之-8-grep

 
阅读更多

 

1 概念:

 

grep ---> global reserch by expression

根据模式搜索文本,并将符合模式的文本行显示出来。

 

 

2 特点:

做部分匹配的,显示的是符合条件的整行数据,重点展示的是匹配到的那个字段。

 

 

3 写法:

 

grep [options] PATTERN [FILE...]
 -i: 忽略大小写
 --color 匹配到的带颜色展示
 -v: 显示没有被模式匹配到的行
 -o:只显示被模式匹配到的字符串

 

匹配次数(贪婪模式):

匹配其前面的字符任意次 ----> 一定要记住,*表示匹配的是前面的字符 比如  a*b表示匹配 前面字符a为任意多次的单词 
eg:
[root@chinadaas109 zhoumingtest]# cat  test
ab 
aab
abb
acb
[root@chinadaas109 zhoumingtest]# grep --color -o 'a*b' test  表示查找b前面出现字符a为0或者多次的单词,并将符合条件的单词打印出来
ab
aab
ab
b
b

 

 

 

4 Pattern介绍, 正则表达式:

 

正则表达式:REGular EXPression, REGEXP 正则里面有一些元字符,这些元字符本身没有含义,

只是表示一些统配的含义。

 

 

元字符:

.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
 字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]

.*: 任意长度的任意字符
\?: 匹配其前面的字符1次或0次,  eg: # grep --color -o 'a\?b' test
\{m,n\}:匹配其前面的字符至少m次,至多n次
 \{1,\}: 至少一次
 \{0,3\}: 至少0次,最多3次

 

 

位置锚定:

 

位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符前面的任意内容必须出现在行尾
^$: 空白行

应用:
查询inittab文件内的空白行 
# grep '^$' /etc/inittab | wc -l
0
查询inittab文件内末尾为数字的行 
# grep '[[:digit:]]$' /etc/inittab
#   5 - X11


\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现

eg: \<root\> 表示匹配整行中只有root这个单词的行
查询以root为行尾的行
# cat test
ab 
aab
abb
acb
rooter
the user is root
# grep 'root\>' test
the user is root

 

 

 

分组:

 

 

 

分组:
\(\)
 \(ab\)*   ---> 分组的目的主要是为了让后面能在继续用到前面的内容 
 后向引用(前面出现什么,后面就能引用到什么)
 \1: 引用第一个左括号以及与之对应的右括号所包括的所有内容
 \2: 引用第二个左括号以及与之对应的右括号所包括的所有内容
 \3: 引用第三个左括号以及与之对应的右括号所包括的所有内容
 
 
# cat test
he love his lover
she like her lover
he like his liker
she love her liker
# grep '\(l..e\).*\1' test   ---> 反向引用的案例
he love his lover
he like his liker

 

 

 案例:

 

1 判断当前系统上是否有用户的默认shell为bash;
   如果有,就显示有多少个这类用户;否则,就显示没有这类用户;

total = `grep "\<bash$" /etc/passwd &> /dev/null | wc -l`
if [ $total -eq 0 ]; then
   echo "no such bash user"
else
   echo "the bash users num is $total"   

2 给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。

#!/bin/bash
A=`grep '^$' /etc/inittab | wc -l`
if [ $A -gt 0 ]; then
 echo "$A"
else
 echo "no blank"
fi

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics