首页 > 代码库 > linux学习之grep egrep 命令及正则表达式
linux学习之grep egrep 命令及正则表达式
有幸在马哥面授班学习linux,马哥常告诉我们要做就做到最好,希望通过这些博文把自己的学习经历和内容好好的记录下来,也算是复习。
grep: Global search REgular expression and Print out the line.
文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行。
grep [OPTION]... ‘PATTERN‘ FILE...
--color
正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能;
元字符:
两类:
基本正则表达式
扩展正则表达式
基本正则表达式:
字符匹配:
.: 匹配任意单个字符
[]:匹配指定集合中的任意单个字符
[[:digit:]], [0-9]
[[:lower:]], [a-z]
[[:upper:]], [A-Z]
[[:alpha:]], [a-zA-Z]
[[:alnum:]], [0-9a-zA-Z]
[[:space:]],空白字符
[[:punct:]],标点符号
[^]:匹配指定集合外的任意单个字符
匹配次数:用于对其前面紧邻的字符所能够出现的次数作出限定
*: 匹配其前面的字符任意次,0,1或多次;
例如:grep ‘x*y‘
xy, xxy, xxxy, y
\?:匹配其前面的字符0次或1次;
例如:grep ‘x\?y‘
xy, xxy, y, xxxxxy, aby
\+: 匹配其前面的字符出现至少1次;
\{m\}: 匹配其前面的字符m次;
例如:grep ‘x\{2\}y‘
xy, xxy, y, xxxxxy, aby
\{m,n\}:匹配其前面的字符至少m次,至多n次;
例如: grep ‘x\{2,4\}y‘
xy, xxy, y, xxxxxxy, aby
grep ‘x\{0,4\}y‘
xy, xxy, y, xxxxxxxxxy, aby
grep ‘x\{2,\}y‘
xy, xxy, y, xxxxxy
.*: 匹配任意长度的任意字符
位置锚定:
^: 行首锚定
写在模式的最左侧
$: 行尾锚定
写在模式的最右侧
^$: 空白行
\<: 词首锚定, 或\b
出现在要查找的单词模式的左侧;\<char
\>:词尾锚定, 或\b
出现在要查找的单词模式的右侧;char\>
\<pattern\>: 匹配单词
分组: \(\)同时匹配多个字符
例如:‘ab\{1,3\}x‘ 可以匹配abx abbx abbbx
‘\(ab\)\{1,3\}x‘ 可以匹配abx ababx abababx
后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用;
\1, \2, \3
模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容;
grep选项:
-v: 反向选取
-o: 仅显示匹配到内容
-i: 忽略字符大小写
-E: 使用扩展正则表达式
-A #: 匹配到的行向下多显示#行
-B #:匹配到的行向下多显示#行
-C #:匹配到的行向上向下多显示#行
扩展正则表达式:
和基本正则表达式大同小异,一般在匹配时无需加转义符\,只有几个特定的需要加转义\
*,?,+,{m},{m,n},^,$,\<,\>,\1,\2
条件选择:a|b
练习:
1、显示/proc/meminfo文件中以大写或小写S开头的行;
2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户
3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
并上述结果中其ID号最大的用户;
4,找出当前系统上其用户名和默认shell相同的用户
5,找出/etc/passwd文件中的一位数或两位数;
6,显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
7,显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
linux学习之grep egrep 命令及正则表达式