文本三剑客

网友投稿 227 2022-10-26


文本三剑客

文本处理工具有很多,像vi,vim,nano等,今天主要说一下文本处理三剑客:

grep系:grep,egrep,fgrep文本搜索工具,这些都是基于"PATTERN"给定的文本进行模糊搜索,而且grep系的默认工作处于贪婪模式下

sed:Stream EDitor 流编辑器,行编辑器,

awk:Gawk-GNU awk,文本格式化工具,文本报告生成器,文本处理的编程语言,

接下来详细说一下

grep系:

grep:利用正则表达式进行全局搜索,并将匹配的行显示出来,

grep [OPTIONS] PATTERN [FILE...]

PATTERN:过滤条件,是由正则表达式元字符及没有特殊含义的文本字符组成

这里解释一下正则表达式元字符和文本字符是什么意思

正则表达式的元字符:会被正则表达式的引擎解释为特殊含义

pcre—perl语言最完整的正则表达式引擎,

基本的正则表达式:BRE

扩展的正则表达式:ERE

grep默认仅支持基本正则表达式

egrep默认仅支持扩展的正则表达式

fgrep默认不开启正则表达式引擎

文本字符:只具备字符表面含义的那些字符

grep的选项:

-i:忽略文本字符的大小

-v:反向匹配,最终显示的结果是pattern不能匹配的行

-c: 计数,统计匹配pattern条件的所有行数

-o:关闭贪婪模式,仅显示pattern能够匹配的内容

-q:安静模式,不输出任何匹配结果

--color:将匹配的pattern的内容以特殊颜色高亮显示  --color=auto

-E:扩展的正则表达式 grep -E相当于egrep

-F:相当于fgrep

-P:使用pcre引擎(Perl Common Regular Expression)

-A n:在显示匹配pattern同时显示其后面的n行

-B n:在显示匹配的pattern同时显示其前面的n行

-C n:在显示屁屁额pattern同时显示其前后各n行在这里再解释一下上面提到的PATTERN:

PATTERN:

正则表达式元字符:

基本的正则表达式元字符::

GLOBBING--简化版的正则表达式:[] ? *

字符匹配:

.:匹配任意单个字符

如果这里输入

grep . text

就会显示text中所有的文本内容

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

grep [a] text

这会显示包含a的字符

[^]: 匹配指定范围以外的任意单个字符;

grep "[^a]" text

这里要对[^a]进行引号引起来才会显示出正确意思

这是现实除了包含a的所有字符

下列所有的字符集都可以当在[]之中匹配单个字符

[:lower:]: 所有小写字母

grep "[[:lower:]]" text

这样就会显示所有的小写字母

[:upper:]:所有大写字母

[:alpha:]: 所有大小写字母

[:digit:]: 所有十进制数字

[:space:]: 所有空白字符

[:alnum:]: 所有大小写字母及十进制数字

[:punct:]: 所有的标点符号

[:xdigit:]: 所有的十六进制数字

a-z:所有的小写字母

grep "[a-z]" text

这也会显示所有的小写字母

A-Z:所有的大写字母

0-9:所有的十进制数字

次数匹配字符:该类字符之前的哪个字符可以出现的次数

*:其前面的字符可以出现任意次数(0次,1次,多次)

grep "a*b" text

这样会显示b前面a出现一次的 没有a的,和a出现多次的字符

\?:其前面的字符可有可无(0次 1次)

grep "a\?b" text

这样就会显示b前面a出现0次和a出现一次的结果

\+:其前面的字符至少出现一次(一次或多次)

grep "a\+b" text

这样会显示b前面a必须出现的的字符

\{m\}:其前面的字符必须出现m次

grep "a\{3\}b" text

这样会显示b前面出现a3次的字符

\{m,n\}:其前面的字符至少出现m次,至多出现n次, m

grep "a\{1,3\}b" text

这样会显示在b前面出现a一次两次三次的字符

\{,n\}:其前面的字符至多出现n次,最少不限,可以0次

grep "a\{,3\}b" text

这样会显示b前面a0,1,2,3次的字符

\{m,\}:其前面的字符至少出现m次,多了不限

grep a\{3,\}b text

这样会显示b前面a出现3次及以上的结果

在正则表达式中表示任意长度任意字符的方式: .*

位置锚定字符:

行锚定:

行首锚定:^

grep ^a text

这样会显示行以a开头的

行尾锚定:$

grep a$ text

这样会显示行以a结尾的行

字锚定

字首锚定:\<或\b

grep "\

这样会显示以a开头的字符串

字尾锚定:\>或\b

grep "a\>" text

这样会显示以a结尾的字符串

\b:旧版本的锚定方法,建议不使用

对于正则表达式引擎来说,字是由非特殊字符组成的连续字符串

分组与引用字符:

\(PATTERN\): 分组,将PATTERN所匹配的所有字符当做一个不可分割的整体来处理

在正则表达式引擎中,有一系列的内置变量,这些变量会保存所有分组内的字符信息,用于后面引用,这些变量依次是\1,\2,\3....

\1:第一组小括号()中的pattern匹配到的字符;

grep "\(ab\)" text

这样会显示包含ab的字符串

或:\|

grep "h\|g" text

这样会显示包含h或包含g的字符串

注意: \|将其左右两边的字符串当做整体对待

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

默认情况下,grep命令后面只允许有一个pattern,如果想要一次grep搜索过程中写多个pattern则需要使用-e,每个-e选项只能使用一个pattern作为参数,将所有的pattern写入到一个文件中,保证每行只有一个pattern,我们可以使用-f file来实现pattern来匹配

grep -e h -e g text

这样会显示包含h或包含g的字符串

egrep元字符意义基本与grep一样

egrep

扩展的正则表达式字符

字符匹配:

.:匹配任意单个字符

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

[^]: 匹配指定范围以外的任意单个字符;

下列所有的字符集都可以当在[]之中匹配单个字符

[:lower:]: 所有小写字母

[:upper:]:所有大写字母

[:alpha:]: 所有大小写字母

[:digit:]: 所有十进制数字

[:space:]: 所有空白字符

[:alnum:]: 所有大小写字母及十进制数字

[:punct:]: 所有的标点符号

[:xdigit:]: 所有的十六进制数字

a-z:所有的小写字母

A-Z:所有的大写字母

0-9:所有的十进制数字

次数匹配字符:该类字符之前的哪个字符可以出现的次数

*:其前面的字符可以出现任意次数(0次,1次,多次)

\?:其前面的字符可有可无(0次 1次)

\+:其前面的字符至少出现一次(一次或多次)

\{m\}:其前面的字符必须出现m次

\{m,n\}:其前面的字符至少出现m次,至多出现n次, m

\{,n\}:其前面的字符至多出现n次,最少不限,可以0次

\{m,\}:其前面的字符至少出现m次,多了不限

位置锚定字符:

行锚定:

行首锚定:^

行尾锚定:$

字锚定

字首锚定:\<或\b

字尾锚定:\>或\b

分组与引用字符:

\(PATTERN\): 分组,将PATTERN所匹配的所有字符当做一个不可分割的整体来处理

在正则表达式引擎中,有一系列的内置变量,这些变量会保存所有分组内的字符信息,用于后面引用,这些变量依次是\1,\2,\3....

\1:第一组小括号()中的pattern匹配到的字符;

或:\|

注意: \|将其左右两边的字符串当做整体对待

fgrep:PATTERN中所有的字符都被当做文本字符来处理

了解完grep系,在了解一下其他的文本处理命令:

wc:统计一个文件中的行数,字数以及字符数

-l:只显示行数

-c:只显示字符数

-w:只显示字数

cut:remove sections from each line of files

能够被cut修剪的文件,一般都是具有一定结构或格式的文本文档:/etc/passwd

-d:指定在实施修剪操作时所依赖的分隔符,默认是空白字符

-f:根据定义的分隔符,来指定字段的编号

#:选择被指定的单个字符

#,#:离散的多个被指定的单个字段

#-#:连续的多个被指定的字段

--output-delimiter 指定分隔符

\n回车换行符  tr 是替换的

awk:awk -F "DELIMITER" '[/PATTERN/]{print $1,$2...$nf}' FILE...

-F "DELIMITER":指定字段分隔符,默认空白字符

$1,$2...$nf:根据字段分隔符切割出来的文本片段都存在相应的内部变量中

sort:将文本文件按行顺序,默认排序方式是按照ASCII表中的字符顺序进行,这个排序标准可以修改

sort lines of text files

-r:逆序排序

-R:随机排序,这种随机算法是非常简陋的,不适用于复杂环境

-u:重复出现的行,只保留一行(连续且完全相同的行叫重复)

-n:以数字的数值大小进行排序

-t:指定数字分隔符

-k:字段的关键字,指定根据那个字段进行排序,一般与-t同时使用

uniq: report or omit repeated lines

报告或忽略重复的行

-d:只显示重复的行,而且每一个重复行只显示一行

-u:只显示不重复的行

-c:在每行前以前缀的方式显示重复行的重复次数

diff:查看两个文件的差异性

同一个文件的不同修改版本;打补丁

patch:report or omit repeated lines


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:shell脚本,测试
下一篇:轻量级声明式的Http库——Feign的独立使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~