【1】Linux文本处理三剑客---grep命令

本文详细介绍了Linux中grep命令的常用选项,包括颜色高亮、忽略大小写、显示行号等,并讲解了正则表达式在grep中的应用,如分组、后向引用、位置锚定等。同时,展示了egrep扩展正则表达式的功能,如星号、问号、加号的使用,并给出了实例,如查找特定用户信息、提取文件路径的基名和目录名。
摘要由CSDN通过智能技术生成

一、grep命令选项

--color=auto:对匹配到的文本着色显示

-v:显示不被pattern匹配到的行

-i:忽略字符大小写

-n:显示匹配的行号

-c:统计匹配的行号,不关心具体是哪些行

-o:仅显示匹配到的字符串,有几个字符串就显示几遍

-q:静默模式,不输出任何信息,可以搭配echo $?使用显示是否匹配到

-A #:after,包含这个字符串的后#行

-B #:before,包含这个字符串的前#行

-C #:context,包含这个字符串的前后各#行

-e:实现多个选项间的逻辑or关系   grep -e ‘cat’ -e ‘dog’ file

-w:匹配整个单词

-E:使用ERE

-F:相当于fgrep,不支持正则表达式

-n:在每一行的最前面列出行号

二、grep中正则表达式的应用

需要注意的是,在基本正则表达式中,一些通配符已经失去了原本的含义,而若恢复他们原本的含义,需要在其前边加上反斜杠\,如:\*  \+  \{  \}  \|  \( \)等。

1、分组:\(\)将一个或多个字符捆绑在一起,当做一个整体进行处理,如:\(root\)\+

2、分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,...

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

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

           \1 : string1\+\(string2\)*

            \2: string2

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

5、或者:\|

示例:a\|b:a或b  c\|cat:c或者cat  \(C|c\)at:Cat或cat

 位置锚定:定位出现的位置

^行首锚定:用于模式的最左侧

$行尾锚定:用于模式的最右侧

^pattern$:用于模式匹配整行

^$:空行

^[[:space:]]*$:空白行

\<或\b词首锚定,用于单词模式的左侧

\>或\b词尾锚定,用于单词模式的右侧

\<pattern\>:匹配整个单词

grep命令支持的正则表达式通配符:

 c*:将匹配0个或多个字符c(c为任意一个字符)

.:将匹配任何一个字符,且只能是一个字符

[xyz]:匹配方括号中的任意一个字符

[^xyz]:匹配除了方括号中字符外的所有字符

^:锁定行的开头

$:锁定行的结尾

 三、egrep及扩展的正则表达式

egrep=grep -E:用来扩展选项为正则表达式

使用了这条命令就可以使用|来分割多个pattern

egrep 选项 pattern

 扩展匹配:

*:匹配前面字符任意次

?:0次或1次

+:1次或多次

{m}:匹配m次

{m,n}:至少m次,至多n次

例子:找出/etc/passwd中的两位或三位数
[root@localhost ~]# grep -woE "[0-9]{2,3}" /etc/passwd
12
11
12
100
14
50
99
99
192
192
81
81
999
998
998
995
997
994
996
993
32
32
例:显示三个用户root、mysql、nginx的UID和默认shell
[root@localhost ~]# grep -E "^(root|mysql|nginx)" /etc/passwd | awk -F ":" '{print $1,$3,$7}'
root 0 /bin/bash
nginx 1001 /bin/bash
mysql 1002 /bin/bash


[root@localhost ~]# grep -E "^(root|mysql|nginx)" /etc/passwd | cut -d: -f1,3,7
root:0:/bin/bash
nginx:1001:/bin/bash
mysql:1002:/bin/bash
例:使用egrep取出/etc/rc.d/rc.loacl的基名

[root@localhost ~]# echo /etc/rc.d/rc.local | grep -oE "[^/]*/?$"
rc.local

例:使用egrep取出/etc/rc.d/rc.loacl的目录名

[root@localhost ~]# echo /etc/rc.d/rc.local | grep -oE "^/.*/"
/etc/rc.d/

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亲爱的老少女

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值