Linux的正则表达式 三剑客 (grep+sed+awk)

1.什么是正则表达式?

grep 文本过滤命令
sed 行编辑器
awk 报告生成器

什么是正则表达式

***正则表达式是一种描述一组字符串的模式,为处理大量文本、字符串而定义的一套规则和方法,以行为单位进行处理。正则表达式分为两类:基本正则表达式(BRE)和扩展正则表达式(ERE)。在linux中使用正则表达式较多的有三个工具,分别为grep,sed和awk,这三个工具被称为linux文本处理的三剑客。


位置锚定:

^:行首锚定

$:行尾锚定

^$:匹配空白行

<或\b:词首锚定

>或\b:词尾锚定

2.grep文本搜索工具

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR。
egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
Grep命令中允许指定的串语句是一个规则表达式,这是一种允许使用某些特殊键盘字符的指定字符串的方法,这种方法中的特殊键盘字符可以用于代表其他字符也可以进一步定义模式匹配工作方式。例如:grep “.*hood” essay1。该命令将在文件essay1中搜索,显示出包含带有字符串hood的字的每一行。命令行中的点表示的是hood之前可以有任意字符,星号指的是在字符串之前点号所表示的任意字符可以有任意个(其中的双引号是可有可无的,但是当语句中包含短语或者空格时就必须加双引号)

cat /yyh/passwd 

在这里插入图片描述

grep   root passwd

在这里插入图片描述

egrep "root|bash" passwd
grep -E "root|bash" passwd

在这里插入图片描述

grep root passwd (贪婪)
grep bash$ passwd
grep -E "^root|bsah$" passwd (或者)
man grep
grep -E ^root passwd | grep bash$(几个条件就过滤几次)

在这里插入图片描述

vim passwd
加入ROOT
grep root passwd
grep -i root passwd(不区分大小写)

在这里插入图片描述

grep -i root passwd -v(反向过滤)

在这里插入图片描述

cat -b passwd  显示列数

在这里插入图片描述

cat -b passwd | grep games -2找出匹配行输出上下两行

在这里插入图片描述

cat -b passwd | grep games -A2匹配行以及下面2行
cat -b passwd | grep games -B2匹配行以及上面2行

在这里插入图片描述

grep的匹配用法

vim test
wetos
weetos
weeetos
ws

在这里插入图片描述

grep ws test
grep w...s test
grep w....s test
grep w.....s test

在这里插入图片描述

grep xy test
grep x*y test

在这里插入图片描述

grep -E 'x?y' test
grep -E 'x+y' tset
grep -E 'x2y' test
grep -E 'x{2}y' test

在这里插入图片描述

grep -E 'x{2,3}y' test
grep -E 'x{2,}y' test
grep -E 'x{,2}y' test

在这里插入图片描述

grep -E 'x.*y' test

在这里插入图片描述

3.sed命令(行编辑器)

cp /etc/fstab .
ls
cat fstab

在这里插入图片描述

man sed
cat fstab -b

在这里插入图片描述

cat fstab -n

在这里插入图片描述

cat fstab -n | sed -n 5p

在这里插入图片描述

cat fstab -n | sed -n 3,5p
cat fstab -n | sed '3p;5p'

在这里插入图片描述

sed -n '/#/p' fstab

在这里插入图片描述

sed -n '/^$/p' fstab
sed -n '/^$/!p' fstab

在这里插入图片描述

sed -n '/^$/!p' fstab | sed -n '/^#/!p' 

在这里插入图片描述

sed的其它模式

cd /mnt
ls
cp /etc/fstab .
ls
sed '/^#/p'
sed '/^#/p' fsta
sed -n '/^#/p' fstab
sed '/^#/d' fstab
cat -n fstab | sed '5d'删除fatab的第五行
cat -n fstab | sed '3,5d'删除fatab的第三行到第五行
cat -n fstab | sed '3d;5d'删除fatab的第三行和第五行

在这里插入图片描述

sed '/^UUID/d' fstab
cat fstab
sed '/^UUID/ahello westos' fstab

a模式****插入
在这里插入图片描述

在这里插入图片描述
c模式 替换
在这里插入图片描述

w模式 导入

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.awk(报告生成器)

AWK是一种优良的文本处理工具。它不仅是 Linux中也是任何环境中现有的功能最强大的数据处理引擎之一。
这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Pete Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。
AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。
它具备了一个完整的语言所应具有的几乎所有精美特性。实际上AWK 的确拥有自己的语言:AWK 程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
最简单地说, AWK 是一种用于处理文本的编程语言工具。AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。它的设计思想来源于 SNOBOL4 、sed 、Marc Rochkind设计的有效性语言、语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想。在最初创造 AWK时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
尽管操作可能会很复杂,但命令的语法始终是: awk ‘{pattern + action}’ 或者 awk ‘pattern
{action}’ 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。

cat passwd
awk -F(指定分隔符) : '{print $1}' passwd打印第一列
awk -F : 'print $2' passwd 打印第二列
awk -F : 'BEGIN{print "hello"}{print $2}' passwd 打印第二列,并且在最前面加上hello
awk -F : 'BEGIN{n=1}{print $2,n}' passwd 在第二列后面 均写上1
awk -F : 'BEGIN{n=1}{print $2,n++}' passwd打印第二列,并且编号
awk -F : 'BEGIN{n=1}{print n++,$1}' passwd编号在前
awk -F : 'BEGIN{n=1}{print n++,$1}END{print “over”}' passwd在后面写上over
awk -F : 'BEGIN{n=1}{print n++,$1}END{print NR}' passwd在结尾输出行数
awk -F : 'BEGIN{n=1}{print n++,$1}END{print NF}' passwd在结尾输出列数
awk '/bash/{print}' passwd 输出包含bash的行
awk -F : '/bash/{print $1}' passwd只输出第一列
awk '{print $0}' passwd输出行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值