Linux文本搜索工具

一、Linux中文本处理三剑客:
1、(1)grep,egrep,fgrep:文本过滤工具(模式:pattern)
工具:

grep 基本正则表达式,grep -E=egrep ,grep -F=fgrep
egrep 扩展正则表达式,-F,-G
fgrep 不支持正则不表达式

(2)sed:stream editor,流编辑器;文本编辑工具
(3)awk:Linux中的实现为gawk,文本报告生成器(格式化文本)
2、正则表达式:Regual Expression,简写为REGEXP

由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;
分两类:
基本正则表达式:BRE basic
扩展正则表达式:ERE extend

正则表达式引擎:
在这里插入图片描述3、grep 用法

–color=auto 高亮显示匹配到的文本
-i 忽略字符大小写
-n 显示行号
-E 支持使用扩展正则表达式
-o 打印匹配到的行
-v 显示不能被匹配到的行
-A # 后几行
-B # 前几行
-C # 前后各几行

提示:#表示行号

举例
在这里插入图片描述
3、元字符
(1)字符匹配

. 匹配出换行符外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意空白符
\d 匹配数字
\b 匹配单词开始或结束
^ 匹配字符串开始
$ 匹配字符串结束
- 表示范围
[ ] 匹配括号中的任意一个字符

(2)匹配次数
用在要指定出现的次数的字符的后面,用来限制其前面字符出现的次数

* 匹配其前面的字符任意次。0次,1次或者多次
.* 匹配任意长度的任意字符
? 匹配其前面的字符0次或者1次,最多一次
+ 匹配其前面的字符1次或者多次,至少一次
{m} 匹配其前面的字符m次
{m,n\ 匹配其前面的字符至少m次,至多n次
{0,n} 至多n次
{m,} 至少m次

举例
显示/etc/passwd文件中不以/bin/bash结尾的行
在这里插入图片描述
(3)位置锚定

^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^$ 空白行
^pattern$ 用pattern来匹配整行
<或者\b 词首锚定,用于单词的左侧
>或者\b 词尾锚定,用于单词的右侧
<pattern> 匹配一个模式字符串

4、分组和引用
分组:

\ (\) 将一个或者多个字符捆绑在一起当做整体处理
\ (xy)*ab 命令行中括号有特殊含义所以用转义符 \

分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\3
. …
括号可以嵌套不能交叉

引用:

做一个经典的例子: vi loves.txt
He loves his lover.
He likes his lover.
She likes her liker.
She loves her liker.
找到前后一致的单词例如同事love 或者同是like l..e
如果grep "l..e.*l..e" loves.txt 发现四句都可以出现要求前后一样的
grep "\(l..e\).*\1" lovers.txt
后向引用:引用前面的分组括号中的模式所匹配到的字符;
grep "^r..t.*r..t" /etc/passwd 这样前后可能会不一致 一个roo 一个r/ft 
grep  "^\(r..t\).*\1" /etc/passwd
发布了10 篇原创文章 · 获赞 11 · 访问量 1349

猜你喜欢

转载自blog.csdn.net/weixin_45440548/article/details/104678020