Linux文本处理命令grep及正则表达式

Linux文本处理命令grep及正则表达式

一、grep

1、grep概述

(1)作用:grep是一文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行

(2)模式:由正则表达式字符及文本字符所编写的过滤条件

2、命令格式

grep [选项] 模式 [文件…]

案例:打印passwd文件中root用户的信息

1

3、grep选项

选项 功能
–color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号,此处的行号时该内容在原文件中的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A 输出满足条件的前几行,比如grep –B 3 “aa” file表示在file中输出有aa的行,同时还要输出aa的前三行
-B 输出满足条件的后几行
-C # 相当于同时用-A –B,即前后都输出
-e 实现多个选项间的逻辑or关系grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 相当于egrep 支持扩展的正则表达式
-F 相当于fgrep,不支持正则表达式

 

二、正则表达式

1、正则表达式及概述

(1)概述:由一类特殊字符及文本字符所编写的模式,用来在文件中匹配符合条件的字符串,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。

(2)正则表达式Linux中支持的程序

grep,sed,awk,vim, less,nginx,varnish等

2、基本的正则表达式

(1)字符匹配:

字符 功能 字符 功能
. 匹配任意单个字符 [] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:alnum:] 字母和数字 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符) [:space:] 水平和垂直的空白字符
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…) [:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符 [:print:] 可打印字符
[:punct:] 标点符号

(2)匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

符号 功能
* 匹配前面的字符任意次,包括0次贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次

(3)位置锚定:定位出现的位置

符号 功能
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词

(4)分组:将一个或多个字符捆绑在一起,当作一个整体进行处理分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3,

\1 :表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:\(string1\+\(string2\)*\)

\1 :string1\+(string2\)*

\2 :string2

后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身

三、正则表达式及grep的使用案例

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

2

SwapCached:           12 kB

SwapTotal:       2097148 kB

或者grep -E “^(s|S)” /proc/meminfo

grep “^[Ss]”  /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行

3

3、显示用户lp默认的shell程序

4

或者cat /etc/passwd | grep “\<lp\>” | cut -d”:” -f7

4、找出/etc/passwd中的两位或三位数

5

或者:cat /etc/passwd | grep -o “\<[0-9]\{2,3\}\>”

5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

6

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

7

7、显示CentOS7上所有系统用户的用户名和UID

8

8、找出/etc/passwd用户名同shell名的行

9

或者 grep “^\([[:alnum:]]\+\):.*\1$” /etc/passwd

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

10

 

四、egrep及扩展正则表达式及使用案例

1、egrep的正则表达式及元字符

元字符 功能 元字符 功能
^ 行首定位符 $ 行尾定位符
. 匹配出换行外的单个字符 * 匹配0个或多个前导字符
[] 匹配指定字符组内任一字符 [^] 匹配不在组内任一字符
+ 匹配一次或多次 匹配0此或1次
a|b 匹配a或者b {m} 匹配m次
{m,n} 至少m,至多n次 \<, \b 语首
\>, \b 语尾 () 分组

2、egrep使用案例

(1)显示三个用户root、mage、wang的UID和默认shell

11

(2)找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

12

(3)使用egrep取出/etc/rc.d/init.d/functions中其基名

13

(4)使用egrep取出/etc/rc.d/init.d/functions的目录名

14

(5)显示ifconfig命令结果中所有IPv4地址

15

(6)将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面

16

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95314

(0)
ponypony
上一篇 2018-04-07
下一篇 2018-04-07

相关推荐

  • 小节

    管道符:cmd1 输出cmd2 输入cmd1 | cmd2如果想将错误信息传给cmd2cmd1 |& cmd2 或 cmd1 2>&1| cmd2加上 >2><&>就是重定向<< key与用户名和组相关的/etc/passwd/etc/shadow 放用户口令的/etc/group/etc/g…

    Linux笔记 2018-04-07
  • shell编程基础一

    变量 算术|字符|条件测试

    2018-04-10
  • Linux用户组管理及用户权限及管道符应用

    一、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ]# who |  cut -d ‘ ‘ -f1 | sort -u who:显示所有已经登录用户的用户名 cut -d ‘ ‘ -f1:取第1列字段数据   sort -u:忽略相同行数据 二、取出最后登录到…

    2018-07-07
  • mysql数据库的安装

    实战:rpm包安装 1、yum安装 centos6上yum install mysql-server rpm -ql mysql-server /etc/rc.d/init.d/mysqld  服务名(服务脚本的名称) /usr/libexec/mysqld  数据库的主程序(二进制的程序路径与平时看到的二进制程序路径不一样) /var/lib/mysql …

    Linux笔记 2018-06-11
  • linux基础篇

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │ └── grub
    ├── dev
    ├── etc
    │ ├── rc.d
    │ │ └── init.d
    │ └── sysconfig
    │ └── network-scripts
    ├── lib
    │ └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │ └── local
    │ ├── bin
    │ └── sbin
    └── var
    ├── lock
    ├── log
    └── run

    2018-05-20
  • keepalived实现高可用

    实现lLVS的高可用;实现nginx的高可用

    2018-07-11