Grep及基本正则表达式

Grep及基本正则表达式
正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法
Linux中的正则表达式,最常应用正则表达式的命令是grep(egrep),sed,awk。
正则表达式分为两种:
基本正则表达式(BRE,basic regular expression)
扩展正则表达式(ERE,extended regular expression)
grep常用参数及作用
–color 匹配到的字符串显示颜色
-i 忽略字符大小写
-o 仅显示匹配的字串
-v 反向选取, 即显示不匹配的行
-E 使用扩展正则表达式
-n 显示行号
-w 以字符串匹配
元数据 意义和范例
1)^word 搜寻word开头的行
例:搜寻以#开头的行,grep -n ‘^#’ file
2)word$ 搜寻word结尾的行
例:搜寻以.结尾的行,grep -n ‘.$’ file
3). 匹配任意一个字符
例:匹配e和e之间有任意一个字符,grep -n ‘e.e’ file
4)\ 转义字符
5)* 前面的一个字符重复0到多次
例:匹配gle,gogle,google,gooogle等,grep -n ‘go*gle’ file
6)[list] 匹配一系列字符中的一个
例:[n1-n2] 匹配一个字符范围中的一个字符
匹配数字字符,grep -n ‘[0-9]’ file
7)[^list] 匹配字符集以外的字符
例:匹配非o字符,grep -n ‘[^o]’ file
8){n1,n2} 前面的单个字符重复n1,n2次
例:匹配google,gooogle,grep -n ’ go{2,3}gle ’ file
9)<word 单词的开头
例:匹配以g开头的单词,grep -n <g file
10)word> 单词的结尾
例:匹配以tion结尾的单词,grep -n tion> file
11)‘ ‘ 强引用,引号内的内容不变
“ ” 弱引用,变量会替换
12)[[:alnum:]] 代表英文大小写字符及数字,即 0-9, A-Z, a-z
13)[[:alpha:]] 代表任何英文大小写字符,即 A-Z, a-z
14)[[:space:]] 任何会产生空白的字符,包括空白键, [Tab] 等等
15)[[:digit:]] 代表数字,即 0-9
16)[[:lower:]] 代表小写字符,即 a-z
17)[[:upper:]] 代表大写字符,即 A-Z
练习题
例1
#1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
cat /proc/meminfo |grep -i “^s”
cat /proc/meminfo |grep “^(s|S)”
在这里插入图片描述

#2、显示/etc/passwd文件中不以/bin/bash结尾的行
cat /etc/passwd |grep -v “:/bin/bash$”

在这里插入图片描述
#3、显示用户rpc默认的shell程序
cat /etc/passwd |grep -w “^alice” |cut -d: -f 7
在这里插入图片描述
#4、找出/etc/passwd中的两位或三位数
cat /etc/passwd |grep -wo “[[:digit:]]{2,3}”
仅用w参数会先以字符串开始匹配,而wo参数符合题目的“两位数或三位数”
在这里插入图片描述
#5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
cat /etc/grub2.cfg | grep “[[:space:]]+[’ ']."
cat /etc/grub2.cfg | grep "[[:space:]]+[[:space:]].

在这里插入图片描述
在这里插入图片描述
以下省略
#6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
netstat -tan | grep “.LISTEN[[:space:]]$”
LISTEN前加上“.*”会让前面部分以高亮显示

在这里插入图片描述
#7、显示CentOS7上所有系统用户的用户名和UID
cat /etc/passwd |cut -d: -f1,3 |grep -w “[1-9][0-9]{,2}$”
cat /etc/passwd |cut -d: -f1,3 |grep -w “[1-9][0-9]{,2}”

在这里插入图片描述
#8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名
和shell同名的行
cat /etc/passwd |grep -w “([^:]* ):.*/\1$”

在这里插入图片描述
#9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
df |grep “^/dev/sd”|grep -wo “[0-9]+%”|sort -nr
在这里插入图片描述
#10、显示三个用户root、wang的UID和默认shell
cat /etc/passwd |grep -w “^(root|alice|jack)” |cut -d: -f 3,7
在这里插入图片描述
#11、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
cat /etc/rc.d/init.d/functions |grep -i “^([_[:alnum:]]+()”
在这里插入图片描述
#12、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo “/etc/rc.d/init.d/functions” | grep -Eo “[^/][/]?$"|tr -d “/”
在这里插入图片描述
#13、使用egrep取出上面路径的目录名
echo “/etc/rc.d/init.d/” | grep -Eo “. * [/]<”
在这里插入图片描述
因为“init.d”是目录,取出它所在目录的上级目录,若“initd”是文件,路径部分相同,因为“init.d/后无内容”;若有内容“init.d/空格”路径部分会 跟只有init.d目录相同;若有内容“init.d/dd或init.d/1或init.d/#”路径部分会多“init.d/”;
#14、统计last命令中以root登录的每个主机IP地址登录次数
last |grep -w "^root.
<pts” | grep -wE “((([0-9])|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|
(25[0-5]))[.]){3}(([0-9])|([1-9][0-9])|(1[0-9]{,2})|(2[0-4][0-9])|(25[0-5])){1}[[:space:]]”
|tr -s " "|cut -d " " -f3|sort|uniq -c
在这里插入图片描述
#15、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
#16、显示ifconfig命令结果中所有IPv4地址
ifconfig |grep -owE “((([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-9]
{1,2})|(1[0-9]{,2})|(2[0-4][0-9])|(25[0-5])){1}[[:space:]]”
在这里插入图片描述
#17、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
cat test | grep -o “[[:lower:]]”|sort |uniq -c|sort -nr |tr -s ’ ’ | cut -d " " -f 3 |tr -d
‘\n’
在这里插入图片描述
#18.找出ifconfig命令结果中的1-255之间的数字
ifconfig | grep -E “<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>”

在这里插入图片描述
例2请在Week22.config上完成以下题目

  1. 取得所有 the 字符相关信息及行号
    在这里插入图片描述
  2. 取得无 the 字符相关信息及行号
    在这里插入图片描述
  3. 取得 test 或 taste 这两个单字相关信息及行号
    在这里插入图片描述
    在这里插入图片描述
  4. 取得所有 oo 字符相关信息及行号
    在这里插入图片描述
  5. 不想取 oo 前面有 g 的字符相关信息及行号
    在这里插入图片描述
  6. oo 前面不想要有小写的字符相关信息及行号
    在这里插入图片描述
  7. 取得 the 只在行首相关信息及行号
    在这里插入图片描述
  8. 取得有 数字 相关信息及行号
    在这里插入图片描述
  9. 取得开头是小写 相关信息及行号
    在这里插入图片描述
  10. 不想要开头是英文字母 相关信息及行号
    在这里插入图片描述
  11. 取得行尾结束为小数点. 相关信息及行号
    在这里插入图片描述
  12. 取得空白行 相关信息及行号
    在这里插入图片描述
  13. 取得g??d 的字符相关信息及行号
    在这里插入图片描述
  14. 取得至少两个 o 以上的字符相关信息及行号
    在这里插入图片描述
  15. 取得开头与结尾都是 g ,两个g 之间仅能存在至少一个 o 相关信息及行号
    在这里插入图片描述
    在这里插入图片描述
  16. 取得g 开头与 g 结尾的字符,当中的字符可有可无 相关信息及行号
    在这里插入图片描述
  17. 取得两个连续 o 的字符相关信息及行号
    在这里插入图片描述
  18. 取得g 后面连接2到5个 o,然后再接一个 g 的字符相关信息及行号
    在这里插入图片描述
    . egrep及扩展正则表达式
    通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价(grep -E == egrep)
    扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据

元数据 意义和范例

  • 重复前面字符1到多次
    例:匹配god,good,goood等字符串,grep -nE go+d’ file
    ? 匹配0或1次前面的字符
    例:匹配gd,god,grep -nE ‘go?d’ file
    | 或or的方式匹配多个字符串
    例:匹配god或者good,grep -nE’god|good’ file
    () 匹配整个括号内的字符串,原来都是匹配单个字符
    例:搜索good或者glad,grep -nE ‘g(oo|la)’ file
  • 前面的字符重复0到多次

猜你喜欢

转载自blog.csdn.net/yangxiaoyan12/article/details/83066333