Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用

时间:2023-01-11 08:54:02

一、我们先看一下正则表达式的概念:
规定:一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示 一个模式,这就是正则表达式(Regular Expression)。
正则表达式包括三种内容:
1.目标字符串中的字符类。具体是指出现的字符;
2.目标字符中的数量限定符。具体指的是字符出现的次数;
3.目标字符串中的位置限定符。
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
下来我们来具体看一下这几种工具的应用吧!
二、grep工具使用:
1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

2.格式
grep [options]

3.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。

4.实际应用:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
通过这个测试可以总结三点:
(1)”?”是前面的单元匹配一次或者零次。
(2)”+”表示前面的单元匹配一次或者多次。
(3)”*”表示前面的单元匹配零次或者多次。
我们再进行一个综合应用,即对ip地址进行匹配:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
三.Linux下的sed工具
1.sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
sed命令行格式为:
sed [-nefri] ‘command’ 输入文本

常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。

常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
2.sed的正则表达式
sed中存在着两种空间:模式空间和保持空间。sed在正常情况下,将处理的行读入模式空间(pattern space),脚本的“sedcommand(sed命令)”就一条接着一条进行处理,知道脚本执行完毕。然后该行被输出,模式(pattern space)被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。
一般情况下,数据的处理只使用模式空间(pattern space),按照如上的逻辑即可完成主要任务。但是某些时候,使用通过使用保持空间(hold space),还可以带来意想不到的效果。
模式空间:可以想成工程里面的流水线,数据直接在它上面进行处理。
保持空间:可以想象成仓库,我们在进行数据处理的时候,作为数据的暂存区域。
正常情况下,如果不显示使用某些高级命令,保持空间不会使用到!
下来我们先看一下sed的使用过程:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
关于模式空间和保持空间的关系呢,有一些互相转换的选项:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
3.我们现在来对sed工具进行简单的应用:
(1)模拟倒序打印:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(2)只打印奇数行和只打印偶数行:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(3)求1到100的和:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
四.Linux下的awk工具
1.awk和sed相比,它既可以以行为单位,也可以以列为单位进行处理。它不仅是一种工具,还是一种脚本语言,用于实现文本处理,不过我们今天不对脚本语言进行研究。awk的缺省行分隔符是\n,列分隔符为连续的空格或者是Tab,也可自行进行定义。
2.awk在打印时有特殊的用法,比如: 0 1为以列分隔符分开的第一个单元,$2为以列分隔符分开的第二个单元,等等,以此类推。
3.awk有两个特殊的标签:BEGIN和END。这里需要说明的是,他们在整个文本处理前才使用。在下面的综合举例中,我们可以看到他们的具体应用。
4.awk的具体应用:
(1)统计文本行数:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(2)统计空行:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
五.Linux下的cut工具
1.cut 命令有截取的意思,可从linux文件或者标准输入中读取内容并纵向截取所需信息列的一个文本截取工具。cut能帮我们切割出所需要的的信息项,让我们在服务器进行数据分析,系统排除的时候使得数据简化,减少工作成本,提高工作效率!
2.我们来看一些对于cut工具的简单实用实例:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
六.Linux下的sort工具
1.sort命令将每一行作为一个单位进行比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按一定的顺序进行输出,实际上,sort命令可以被认为是一个非常强大的数据治理工具,用来治理内容类似数据库记录的文件。
2.来看一下例子:
(1)升序排列:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(2)去重:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(3)降序排列:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(4)排序后写入本文件中:这里一定要注意不能用重定向,否则文件内容会被清空。
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(5)按照第二列进行排序:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
七.Linux下的uniq工具
1.Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。
2.简单应用:
(1)比较两个文件:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(2)连续的去重:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(3)去重并统计次数
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(4)只显示重复的:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
(5)只显示不重复的:
Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用

今天的介绍就到这里了,我总结的比较繁琐也比较乱,希望大家可以谅解!