Linux之文本处理三剑客之egre、fgrep

简介:

egrep是grep的另一种模式,用-E选项(启用或关闭命令的某个或某些功能),启用扩展正则表达式引擎功能,使用扩展正则表达式的字符纯文本字符组合的PATTERN,对文本流逐行匹配检查,将匹配到的字符串所在的行显示至标准输出

fgrep,grep -F选项,关闭正则表达式引擎功能,以纯文本字符组合为PATTERN,基于独有的算法,对文本进行高效的匹配检查,将匹配到的字符串所在的行显示至标准输出


egrep命令

1
2
3
4
5
6
7
8
9
[root@izpo45bh60h6bsz ~] # type egrep
egrep  is aliased to ` egrep  --color=auto'
[root@izpo45bh60h6bsz ~] # which --skip-alias egrep
/usr/bin/egrep
[root@izpo45bh60h6bsz ~] # egrep --help          #获取使用帮助
Usage:  grep  [OPTION]... PATTERN [FILE]...
 
-E, --extended-regexp  #ERE
#其帮助内容同grep命令的使用内容


-E选项, grep -E 相当于 egrep

1
2
# grep -E '^root\b' /etc/passwd
# egrep '^root\b' /etc/passwd

wKiom1l_-4nSQvzuAAASKk9Gtj0791.png


扩展正则表达式字符

    字符匹配

    匹配次数

    位置锚定

    或


字符匹配

    1) .     任意单个字符

    2) []   指定范围内的任意单个字符,  [abc] a或b或c 

    3) [^] 指定范围外的任意单个字符

    

使用示例

1
2
3
4
5
6
[root@izpo45bh60h6bsz ~] # vim a.txt #vim是一个文本编辑命令,进入后按i键,才可编写文本,编写完毕后。按esc键,再按shift 加 : 键,输入wq加Enter键即可。
how are you?
hwo old are you?
HOW ARE YOU?
HWO OLD ARE YOU?
root:x:0:0:root: /root : /bin/bash

 .   匹配任意单个字符

1
# egrep  'r..t' a.txt

wKiom1l_9XPBxNdCAAAII9Gqxjs786.png

 

[]   匹配指定范围内的任意单个字符,  [abc] a或b或c 

1
# egrep  '[eFH]' a.txt

wKioL1l_9jTRilLBAAANEkuiAm0800.png

[^] 表示指定范围外的任意单个字符, [^abc] 非a和b和c

1
# egrep  '[^eFH]' a.txt

wKioL1l_9qHhcXYrAAAP5fCxW4w214.png


次数匹配 前面单个字符出现的次数

    1)*  匹配前面单个字符,出现0、1或多次

    2)?  匹配前面单个字符,出现0或1次

    3)+  匹配前面单个字符,出现至少1次,>=1次

    4){m}  精确匹配前面单个字符m次

    5){m,} 匹配前面单个字符,至少m次

    6){,n} 至多n次

    7){m,n}  至少m次,至多n次


使用示例

1
2
3
4
5
6
7
[root@izpo45bh60h6bsz ~] # vim output_delimiter.txt
ab
cb
a12b
aab
abb
abababababababab


*  匹配前面单个字符,出现0、1或多次

1
# egrep 'a*b' output_delimiter.txt

wKioL1l_-cGQr_jrAAAN5cuhiEM442.png


.* 匹配 . 任意次,任意单个字符任意次,任意长度任意字符,(glob中的*)

1
# egrep  'r.*t' a.txt

wKiom1l_-riRcRSaAAAIXL63Q6c275.png


?  匹配前面单个字符,出现0或1次 (基本正则表达式中 \? )

1
2
# egrep 'a?b'  output_delimiter.txt 
# grep 'a\?b'  output_delimiter.txt

wKioL1l__DLDa2I4AAAOP4Ub1Eo129.png

wKioL1l__MDSLdFlAAAOcDSorS4432.png


+  匹配前面单个字符,出现至少1次,>=1次 (基本正则表达式中 \+ )

1
2
# egrep 'a+b'  output_delimiter.txt
# grep 'a\+b'  output_delimiter.txt

wKioL1l__R_DbUTWAAAL9nJFM_U113.png

wKiom1l__VCRMo_pAAAMHGZ4GmA580.png


{m}  精确匹配前面单个字符m次 (基本正则表达式中 \{m\} )

1
2
# egrep 'a{3}b' output_delimiter.txt
# grep 'a\{3\}b' output_delimiter.txt

wKioL1l__euSEVCIAAAJy3qyw7M183.png

wKiom1l__g3gLEtcAAAKIv1jrDs324.png


{m,} 匹配前面单个字符,至少m次 (基本正则表达式中 \{m,\} )

1
2
# egrep 'a{3,}b' output_delimiter.txt
# grep 'a\{3,\}b' output_delimiter.txt

wKioL1l__pWjaf3GAAAJsFepLwQ209.png

wKiom1l__qazqraWAAAKMyMLfvk260.png


{,n} 匹配前面单个字符至多n次 (基本正则表达式中 \{m,\} )

1
2
# egrep 'a{,2}b' output_delimiter.txt
# grep 'a\{,2\}b' output_delimiter.txt

wKiom1l__9HxtL69AAAPF6-VNYg631.png

wKioL1l__2rhls23AAAPRHJw3ZU952.png


{m,n}  匹配前面单个字符至少m次,至多n次 (基本正则表达式中 \{m,n\} )

1
2
# egrep 'a{3,6}b' output_delimiter.txt
# grep 'a\{3,6\}b' output_delimiter.txt

wKiom1mAAGfjxENaAAAT-AQJe5M387.png


位置锚定 期望匹配的字符必须出现在某个位置

    1)^ 行首锚定,用于模式最左侧。正则表达式所匹配到的字串符必须出现在行首

    2)$ 行尾锚定,用于模式最右侧。由正则表达式所匹配到的字串符必须出现在行尾

    3)^pattern$: 整行只能匹配此模式

    4)匹配空白行: ^[[:space:]]*$ 空白可有任意次数

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

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

    7) \<PATTERN\> 或 \bPATTERN\b 匹配整个单词,用于单词左右两侧

    8)分组,后向引用 ()

    

^ 行首锚定,用于模式最左侧。正则表达式所匹配到的字串符必须出现在行首

1
# grep -E '^root' /etc/passwd

wKioL1mABmvyjIy1AAAQrKtD4Ss937.png



$ 行尾锚定,用于模式最右侧。由正则表达式所匹配到的字串符必须出现在行尾

1
# grep -E '/bin/bash$' /etc/passwd

wKioL1mABsTjvcDyAABNVhnmns4443.png


^pattern$: 整行只能匹配此模式

1
2
# grep -E -c '^$' /etc/init.d/functions            #匹配空行
-c 显示匹配到的字串所在行的所有行的行数


匹配空白行: ^[[:space:]]*$ 空白可有任意次数

1
# grep -E -c '^[[:space:]]*$' /etc/init.d/functions  #匹配可为空行或有空白字符的行


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

1
# grep -E '\broot' /etc/passwd


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

1
# grep -E 'root\b' /etc/passwd

 

\<PATTERN\> 或 \bPATTERN\b 匹配整个单词,用于单词左右两侧

1
# grep -E '\broot\b' /etc/passwd


( ) 分组, (基本正则表达式中 \(\) ) 将任意个字符当前同一个组件

1
2
3
4
# cat grep.txt 
abxy
xxxxxxy
xyxyxyxyabcxy
1
# grep -E '(xy)+' grep.txt

wKiom1mABaHhtcfrAAAJZiiJ5ys160.png

wKioL1mABcCgwK04AAAJvgkac4g213.png


注意:

    表示字符串本身时,如果使用的命令使用的正则表达式字符,有\,则不用\; 如果没有\,则加\。

1
# grep -o '[[:alpha:]_]\+()' /etc/rc.d/init.d/functions  #正则表达式字符为 \( \)
1
grep  -E -o  '[[:alpha:]_]+\(\)'  /etc/rc .d /init .d /functions  #扩展正则表达式字符为 ( )


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

1
# grep -E '(^[[:alnum:]]+\>).*\1$' /etc/passwd

wKiom1mACGXgrMPuAAAVp_KTtEQ359.png


    [cCat]    c或C或a或t

    c|Cat     c或Cat

    (c|C)at   cat 或 Cat

1
2
3
4
5
6
# vim dsdcI.txt
cat
Cat
c12
C123
at

1、[cCat] 匹配指定范围内的任意单个字符

1
# egrep '[cCat]' dsdcI.txt

wKioL1mACx2A4xSxAAAKCszkeZc503.png

2、c|Cat  匹配c 或 Cat

1
# egrep 'c|Cat' dsdcI.txt

wKiom1mAC2jCxlKbAAAIjdA3gP0001.png

3、(c|C)at 匹配 cat 或 Cat

1
# egrep '(c|C)at' dsdcI.txt

wKioL1mAC77hl50wAAAH_aidxsA632.png


总结:

打印匹配到的字符所在的行

egrep与grep元字符相同的使用

.  [ ]  [^]  \<  \>  \b  ^  $  *  .*

egrep与grep元字符的不同使用

grep

\?

\+

\{m,n\}

\(\)


egrep

+

{m,n}

()

|


egrep 或 “grep并不支持”

[abcd] 字符级别的或

c|cat 左侧整体或右侧整体

(c|c)at 分组或











本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1952624,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
Linux Shell Perl
Linux下的Shell基础——文本处理工具(五)
Linux下的Shell基础——文本处理工具(五)
31 1
Linux下的Shell基础——文本处理工具(五)
|
2月前
|
Shell Linux C语言
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
44 2
|
2月前
|
弹性计算 Linux Shell
Linux技术基础(2)——文本处理
文本处理实验:探索[Vim](https://developer.aliyun.com/adc/scenario/aced2264751f4866a8340de4cf9db0fa)的命令、输入和底线模式,学习文本编辑快捷操作,如光标移动、删除、复制和粘贴。了解如何使用底线命令模式进行文件保存、退出及搜索替换。同时,掌握`cat`、`more`、`less`、`head`、`tail`等文本查看命令,以及`stat`、`wc`、`file`、`diff`等文件处理命令。利用`grep`、`sed`、`awk`和`cut`进行文本搜索、替换和分析。
|
2月前
|
Shell Linux C语言
【Shell 命令集合 文本处理工具】Linux 字段连接 join 命令使用指南
【Shell 命令集合 文本处理工具】Linux 字段连接 join 命令使用指南
33 1
|
2月前
|
存储 Shell Linux
【Shell 命令集合 文件管理】Linux 文本处理工具 awk命令使用指南
【Shell 命令集合 文件管理】Linux 文本处理工具 awk命令使用指南
40 0
|
2月前
|
监控 Linux
Linux 常用的文本处理工具
将一个或多个文件的内容连接并显示在终端上,创建新文件或将内容追加到已有文件。 不会分屏显示文件内容,适用于较小的文件。 在执行上述命令后,你可以输入内容,按Ctrl + D保存并退出。 more/less 分页 more filename more 按空格键查看下一页,按Enter键查看下一行,按q键退出并退出,使用b向上翻动一页。 less 可以被视为 more 的升级版本 less filename less 按空格键查看下一页,按Enter键查看下一行,按q键退出并退出,使用b向上翻动一页,使用箭头键、搜索命令 /。
20 2
|
10月前
|
Linux
【Linux命令200例】cut强大的文本处理工具
cut命令是Linux系统中常用的文本处理工具之一,用于选取文件中特定字段(列)或字符,以便进行后续操作。使用cut命令可以快速提取感兴趣的信息,节省时间和精力。
|
8月前
|
弹性计算 Linux Shell
Linux系统的文本处理
本文将介绍如何使用Linux系统中的文本编辑工具Vim以及文本处理命令。
482 0
|
8月前
|
运维 Shell Linux
linux文本处理工具——grep、sed、awk用法
linux文本处理工具——grep、sed、awk用法
98 1
|
9月前
|
Linux 开发者
开发常用的 Linux 命令3(文本处理、打包和压缩)
开发常用的 Linux 命令3(文本处理、打包和压缩)