码迷,mamicode.com
首页 > 其他好文 > 详细

grep命令及正则表达式

时间:2018-01-03 22:47:55      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:例子   file   nbsp   命令执行   贪婪模式   blog   信息   sys   次数   

grep:global search regular expression(RE) and print out the line

文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行。

基本语法

grep [option] PATTERN file, ...

正则表达式:是一类字符所书写出的模式(pattern)
元字符:不表示字符本身的意义,用于额外功能性的描述

此处表达式分为基本正则表达式和扩展正则表达式。

基本正则表达式的元字符

字符匹配:.
. :  任意单个字符

grep --color=auto Boot /etc/rc.d/rc.sysinit
grep --color=auto B..t /etc/rc.d/rc.sysinit
grep --color=auto r..t /etc/passwd

 

[]: 指定范围内的任意单个字符
[^]: 指定范围外的任意单个字符

[0-9], [[:digit:]]
[a-z], [[:lower:]]
[A-Z], [[:upper:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]

alias cgrep=grep --color=auto
cgrep [Rr]..[Tt] /etc/passwd
cgrep [Rr].*[Tt] /etc/passwd
cgrep [Rr][^[:punct:]]*[Tt] /etc/passwd

 

次数匹配:用来指定匹配其前面的字符次数

* :   任意次
  例子:x*y, xxy, xy, y
.* :  匹配任意长度的任意次
\?:  0次或1次
  x\?y, xy, y, xxy
  贪婪模式:尽可能长的去匹配字符
\{m\}:     匹配其前面字符m次
\{m,n\}:  匹配其前面字符至少m次,最多n次
\{m,\}:    匹配其前面字符至少m次,最多不限
\{0,n\}:   匹配其前面字符最多n次

位置锚定:用于指定字符出现的位置
^: 锚定行首
  ^char
  cgrep ‘^[Rr][^[:punct:]]*[Tt]‘ /etc/passwd
$:锚定行尾
  char$
  cgrep ‘bash$‘ /etc/passwd
^$: 空白行

\<char, \bchar :锚定词首
char\>, char\b :锚定词尾

分组
\(\)
\(ab\)*xy :把ab当成一个部分

引用
\1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容
\2 --前面匹配到的内容,后面还要继续再出现一次
...
  \(a.b\)xy\1:
    a6bxy 不能匹配
    a6bxya7b 能匹配到

 

下面演示一下分组的具体用法:

cat grep.txt
He like his lover.
She love her liker.
He love his lover.
she like her liker.

技术分享图片

 

grep 常用的选项:

-v: 反向,显示不能被模式所匹配到的行
-o: 仅显示被模式匹配到的字串,而非整行
-i: 不区分字符大小写,ignore-case
-E: 支持扩展的正则表达式
-A # : 显示匹配到的行及下#行
-B # : 显示匹配到的行及上#行
-C # : 显示匹配到的行及上下各#行

1、显示/proc/meminfo文件中以大小写s开头的行

grep "^[sS]" /proc/meminfo
grep -i "^s" /proc/meminfo

 

2、取出默认shell为非bash用户

grep [^bash]$ /etc/passwd | cut -d: -f1
grep -v ^bash$ /etc/passwd | cut -d: -f1

 

3、取出默认shell为bash的且其ID号最大的用户

grep "bash$" /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1

 

4、显示/etc/rc.d/rc.local文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行

grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.local

 技术分享图片

 

5、显示/boot/grub2/grub.cfg中以至少一个空白字符开头的行

grep "^[[:space:]]\{1,\}" /boot/grub2/grub.cfg                   这个包含空白行
grep "^[[:space:]]\{1,\}[^[:space:]]\{1,\}" /boot/grub2/grub.cfg 把空白行除外

 

6、找出/etc/passwd文件中一位数或两位数

grep --color=auto "\b[[:digit:]]\{1,2\}\b" /etc/passwd
grep --color=auto "\<[0-9]\{1,2\}\>" /etc/passwd

 

7、找出ifconfig命令结果中的1到255之间的整数

8、查看当前系统上root用户的所有信息

grep "^root\>" /etc/passwd

 

9、找出当前系统上其用户名和默认shell相同的用户

grep --color=auto "^\([[:alnum:]]\{1,\}\)\>.*\1$" /etc/passwd

 

10、找出netstat -tan命令执行的结果中以"LISTEN"或"ESTABLISHED"结尾的行

11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示

 

cut 行剪切命令
  -d 指定分隔符
  -f 指定显示第几段
    cut -d: -f1 以:为分隔符,显示第一段

sort 排序命令
  -n 以数值大小排序
  -t: 指定分隔符为:
  -k3 指定排序的数值在第3列

 

grep命令及正则表达式

标签:例子   file   nbsp   命令执行   贪婪模式   blog   信息   sys   次数   

原文地址:https://www.cnblogs.com/chengtai/p/8185751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!