Linux文本三剑客

Linux下文本三剑客

    • 正则表达式
    • 文本三剑客Grep
    • 文本三剑客Sed
    • 文本三剑客Awk

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。文本三剑客均支持正则表达式因此在学习文本三剑客之前我们需要学一下正则表达式。

正则表达式

1.正则表达式主要分为两类:

  • 基本的正则表达式
  • 扩展的正则表达式

下面我们来看一下基本的正则表达式来感受一下正则表达式的强大

  • $ :用来匹配模式的最右则如"ksy$"是用来匹配
  • ^ :用来匹配模式的最左侧如 "^ksy"是用来匹配以单词ksy开头的行。
  • $^:表示匹配空格行
  • *:用来匹配前一个字符0次或者1次以上
  • .*:组合符用来匹配任意长度的字符串
  • ^.*:用来匹配任意多个字符开头的内容
  • .*$:用来匹配任意多个字符结尾的内容
  • [abc]:用来匹配集合里面任意一个字符
  • [^abc]:表示用来匹配除了集合当中的任意字符
  • . :用来匹配单个任意字符并且有且只能匹配一个字符不能匹配空行
  • \:用来转义让有特殊含义的字符现出原型比如说.就代表小数点

以上就是常用的正则表达式,一些复杂的正则表达式在这里就不列出下面我们来看一下一些扩展的文本三剑客

Linux文本三剑客_第1张图片

注意:扩展的正则表达式grep如果要使用必须使用grep -E才能使用

文本三剑客Grep

下面让我们来看一下文本三剑客当中的grep

1.grep的作用主要用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行。
2.模式:由正则表达式的元字符及文本字符所编写出的过滤条件.

语法形式:grep [options] [pattern] file。
grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式。其主要选项主要有

Linux文本三剑客_第2张图片

下面我们来演示几个grep的案例:
首先我们先打开一个文件然后我们往里面写入一点内容:

Linux文本三剑客_第3张图片

现在我们想将这个文件里面的内容显示出来但是我们不想看到看到空行,此时我们可以使用上面的组合符 ^$代表空格在使用grep的-v选项即可

Linux文本三剑客_第4张图片

如果我们此时想要以My单词开头的行此时如何获取了?

Linux文本三剑客_第5张图片

我们在文本的最后加入一行注释,让后我们想输出文本当中除了注释和空行的
内容如图所示:

Linux文本三剑客_第6张图片

我们发现这个是以"#号开头此时我们可以使用grep -v 将其过滤掉然后将交给grep在次过滤

Linux文本三剑客_第7张图片

其他的选项和正则各位老铁可以下列自行尝试

文本三剑客Sed

sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。sed是操作、过滤和转换文本内容的强大工具。常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。

其基本语法格式为:sed[选项][sed内置命令字符][输入文件]

其中sed的选项主要有:

Linux文本三剑客_第8张图片

sed的内置命令字符用于对文件进行不同的操作功能,如对文件增删改查。其主要命令有:

Linux文本三剑客_第9张图片

sed进行范围匹配

Linux文本三剑客_第10张图片

注意:注意sed和awk使用单引号,双引号有特殊解释
下面我们开始进行案例演示依然我们依然使用上面的那个文件夹进行案例演示:

Linux文本三剑客_第11张图片

此时如果我们想要将第5行或者第6行的打印出来,此时我们就可以使用sed -n选项进行读取

Linux文本三剑客_第12张图片

我们在来一个案例我们想要输出含有linux的行:sed -n ‘/Linux/p’ test.txt

Linux文本三剑客_第13张图片

如果我们想要删除含有Linux的行又改怎么操作了?有老铁可能觉得这也太容易了直接 sed -n ‘/linux/d’ 不就行了吗?下面我们来执行一下看一下效果如何

Linux文本三剑客_第14张图片

可能有老铁会问为啥没有删除掉了,这是因为sed会按行将内容读取到内存当中我们删除的是内存当中的数据此时我们如果想要删除文件里面的内容我们可以使用-i选项就可以了。

下面我们换一个内容进行操作:

Linux文本三剑客_第15张图片

现在我们想要将My替换成为I 此时我们可以使用s///g来进行操作

Linux文本三剑客_第16张图片

下面我们在来一个案例如果我们想要在第2行的后面增加行内容 I love Linux
此时我们可以使用sed 的a选项

Linux文本三剑客_第17张图片

而i选项是在某一行进行插入而已

文本三剑客Awk

awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式.awk更是是一门编程语言,支持条件判断、数组、循环等功能

下面我们来看一下awk的基本语法:awk [option] ‘pattern[action]’ file …

Linux文本三剑客_第18张图片

Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是print和printf。
awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分割符去工作,没有指定则默认空格

Linux文本三剑客_第19张图片

下面我们来看看awk的内置命令

Linux文本三剑客_第20张图片
Linux文本三剑客_第21张图片

下面我们来实践一下awk命令的使用,我们以这个文件为列进行操作。我们想要拿到第二列的值

Linux文本三剑客_第22张图片
Linux文本三剑客_第23张图片

或者我们想要第2行第2列和第3列的值此时我们又如何操作了?

Linux文本三剑客_第24张图片

注意awk分隔文件默认是按照空格进行分隔如果是其他字符我们则需要使用-v选项修变量或者 awk -F “分隔字符” 。awk输出的时候也是按照空格输出的如果我们想要指定可以使用 awk -v OFS ="分隔符"来进行设置。

你可能感兴趣的:(linux,正则表达式,unix)