学习shell的第五天(正则表达式;grep;sed;awk)

6 篇文章 0 订阅

一、正则表达式

正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。
被vim、sed、awk、grep调用

正则表达式 其实只是用来匹配行的一个工具,用来查找符合条件的行;

grep使用时 不同加// 双斜杠括住正则表达式。grep 使用正则表示式只负责找到它,直接在引号中使用正则表达式;
sed使用时得加//
awk使用时也得加

1.1基本正则表达式

正则表达式由元字符组成,那么这些元字符都有哪些,分别代表了什么含义呢?

元字符含义
^行首定位符
$行尾定位符
.匹配任意单个字符
*匹配前导符0到多次
[ ]匹配指定范围内的一个字符
[^]匹配不在指定组内的字符
\用来转义元字符
<词首定位符
>词尾定位符
()组合/替换
x{m}字符x重复出现m次

我们接下来以grep为例进行逐个讲解

1.1.1 ^ 行首定位符

^x 查找以x为开头的行
exp:
在这里插入图片描述

1.1.2 $ 行尾定位符

x$ 查找以x为结尾的行
exp:
在这里插入图片描述

1.1.3 . 匹配任意单个字符

. 代表任意字符都可以
exp:
在这里插入图片描述

1.1.4 * 匹配前导符 0 到 多次

查找 在 * 前的字符出现了0 到多次的 行
exp:
前导符为o
在这里插入图片描述

1.1.5 .* 匹配所有字符

这是 * 和 . 的组合,意思是 任意字符出现了 0 到多次, 那么可以认为是任意文件,即输出文件中所有内容;
在这里插入图片描述

1.1.6 [ ] 匹配指定范围内的一个字符

例如 [ a-z ] 就是任意一个小写字母 ; [ A-Z] 匹配任意一个大写字母 ; [ 0-9 ] 匹配任意一个数字
exp:
在这里插入图片描述
在这里插入图片描述

1.1.7 [^] 取反 匹配不在指定组内的字符

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

1.1.8 \ 用来转义元字符

exp:
在这里插入图片描述
这就是 \ 的作用,用来转义,把具有特殊含义的字符给脱去特殊意义,而是仅仅作为一个字符而已。

1.1.9 < 词首定位符

用来确定单次的开始部分
exp:
在这里插入图片描述

1.1.10 > 词尾定位符

exp:
在这里插入图片描述

1.1.11 ()

(…) 匹配稍后使用的字符的标签
在这里插入图片描述
格式为 / 括号把要匹配的字符分成几部分/ \ 后面的数字代表前面的第几个括号里的东西放在这/

1.1.12 x{m} 代表 x 出现了m 次

在这里插入图片描述

1.1.13 x{m,} 字符x重复出现m次以上

在这里插入图片描述

1.1.14 x{m,n} 字符x重复出现m到n次

在这里插入图片描述

1.2扩展正则表达式

元字符含义
+匹配1~n个前导字符
匹配0~1个前导字符
a 管道符b匹配a或b
()组字符

使用扩展正则表达式 要用 egrep 或者 grep -e 命令 文件
接下来以grep为例

1.2.1 + 匹配1到n个前导字符

与 * 类似,只不过范围不一样而已,
exp:
在这里插入图片描述

1.2.2 ? 匹配0到1个前导字符

在这里插入图片描述

1.2.3 a管道符b 匹配 a 或者b

在这里插入图片描述

1.2.4 () 组字符

可与 管道符一起使用
exp:
在这里插入图片描述

二、grep

过滤,查找文档中的内容 。 在上一节以grep为例,不再细讲

== grep 使用正则表达式时不用加// ,也就是双斜杠 ==

grep 后面使用单双引号都可以

== grep 需要在使用正则表达式时加上e 为egrep 或者使用 grep -e ==

2.1 分类

grep 支持正则表达式的元字符
egrep 既支持正则表达式元字符又支持扩展表达式元字符

2.2 参数

2.2.1 -q 静默

即不会有任何反应
exp:
在这里插入图片描述

2.2.2 -v 取反

exp:
在这里插入图片描述

2.2.3 -R 查看目录下的相关信息

exp:
在这里插入图片描述

2.2.4 -o 找到关键词即可

exp:
在这里插入图片描述

2.2.5 -Cx x代表数字 意为查找相关行的上下x行

exp:
在这里插入图片描述

2.2.6 -Bx 前x行 ; -Ax 后x行

exp:
在这里插入图片描述

2.2.7 -n 过滤并且带行号

在这里插入图片描述

三、sed

sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;

3.1格式

1 .sed 选项 '(范围,不加默认为所有行)命令 针对的对象 ’ 文件 # 选项 例如 -r -ri -r是针对正则表达式的 ;-ri 是 直接进行修改文件的

2 .sed 选项 –f 脚本 文件

3.2示例

命令含义
d删除
s替换某个
r读文件
w写文件
a追加
i插入命令
c替换整行
n获取下一行
取反
e多重编辑
hHGgx暂存编辑

示例:

3.2.1 d 删除

sed -r ’ /匹配行/d’ 文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.2 s 替换

格式 sed -r ‘s/要替换的匹配行/替换成什么/’ 注意这里的替换仅为替换每行出现的第一个字符,全局替换要加g

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

3.2.3 r 读取新文件

在当前文件中,读取其他文件“部分”内容。
在这里插入图片描述
在这里插入图片描述

3.2.4 w 另存为

sed -r ’ (范围,不加默认为整个文档)w 另存到哪个文件 ’ 文件
在这里插入图片描述
在这里插入图片描述

3.2.5 a 追加

sed -r ’ (范围,不加默认为每一行都执行) a 追加对象 ’ 文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.6 i 插入命令

sed -r ’ (范围,不加默认为每一行都执行) i 插入对象 ’ 文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.7 c 整行替换

sed -r ’ (范围 ,不加默认为每一行) c 要替换成什么 ’ 文件
在这里插入图片描述
在这里插入图片描述

3.2.8 获取下一行

通常和其他命令一起使用
大括号{} 里 加入其他命令
在这里插入图片描述
在这里插入图片描述

3.2.9 ! 取反

对范围取反,和其他命令一起使用, sed -r ’ 范围 ! 命令 ’ 文件

在这里插入图片描述

3.2.10 e 多重编辑

用于同时执行多条命令 sed -r -e ’ 命令1 ’ -e ’ 命令2’ -e ‘命令3’ … 文件 针对一个文件处理多条命令
在这里插入图片描述

四、awk

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。
数据可以来自标准输入、一个或多个文件,或其它命令的输出。
它支持用户自定义函数和动态正则表达式等先进功能,

awk的处理文本和数据的方式是这样的,
它逐行扫描文件,从第一行到最后一行,
寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕)。

在这里插入图片描述

语法:BEGIN{} {} END{}

BEGIN{} begin发生在行处理前执行的命令(注意大写);
{} 行处理时具体执行的命令,读一行执行一次;
END{} 行处理后执行的命令

awk由模式和动作两部分组成
模式:可以是条件测试,正则,复合语句
动作:可以是打印,计算等。 比如print

以下都为动作

4.1 内部变量

内部变量设置在行处理模式之前 也即在BEGIN里

4.1.1FS OFS

FS 输入字段分隔符 以什么作为分割点
OFS 输出字段分隔符 以什么作为输出时的分割点

在这里插入图片描述

4.1.2 RS ORS

RS 输入记录(行)分隔符,默认换行符 默认是以空格作为行分割符,这里重新定义
ORS 输出记录(行)分隔符,默认换行符

在这里插入图片描述

4.1.3 FNR NR

FNR 多文件独立编号
NR 多文件汇总编号

在这里插入图片描述

4.2 格式化输出

4.2.1 print

例如 {print $1,$2 " 编辑想要输出的内容 ,配合变量使用 "…} 行处理模式时,print 默认以空格作为字段分割符
在这里插入图片描述

4.2.2 printf

补充: \n 为换行符
在这里插入图片描述
加上管道符:
在这里插入图片描述

4.3 模式 找某一行

awk由模式和动作两部分组成
模式:可以是条件测试,正则,复合语句
动作:可以是打印,计算等。 比如print

任何awk语句都由模式和动作组成。模式部分决定动作语句何时触发及触发事件。
如果省略模式部分,动作将时刻保持执行状态。每一行都会有动作。
模式可以是任何条件语句或复合语句或正则表达式。有模式的话,就是对模式对应的行进行动作。

接下来我们看模式

4.3.1 以正则表达式为寻找

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.3.2 以数值寻找

运算符 含义 示例
/# < 小于 x<y
/# <= 小于或等于 x<=y
/# == 等于 x==y
/# != 不等于 x!=y
/# >= 大于等于 x>=y
/# > 大于 x>y

awk ’ 比较 ’ 文件

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

4.3.3 以字符串寻找

补: 字符要加双引号
在这里插入图片描述

4.3.4 多条件查询

&& 代表两边条件同时满足
|| 代表两边条件有一个满足即可

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

在这里插入图片描述

4.4 awk 脚本编程

4.4.1条件判断

4.4.1.1 if单分支语句

语法:{if(表达式){语句;语句;…}}
在这里插入图片描述

4.4.1.2 双分支语句

语法:{if(表达式){语句;语句;…}else{语句;语句;…}}
在这里插入图片描述

4.4.1.3 多分支语句

语法:{if(表达式1){语句;语句;…}else if(表达式2){语句;语句;…}else if(表达式3){语句;语句;…}else{语句;语句;…}}

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

4.4.2 循环

与行处理模式之前的BEGIN结合使用

4.4.2.1 while

语法1: awk 'BEGIN {while (条件){执行语句}}’
在这里插入图片描述
语法2:awk -F: ‘{while (条件){执行语句}}’ 文件
在这里插入图片描述

4.4.2.2 for

语法1: awk 'BEGIN{for(初值,条件,步长){执行}}'
在这里插入图片描述
语法2: awk -F: ‘{for(初值,条件,步长){执行}}’ 文件
在这里插入图片描述

4.4.3 数组

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

在这里插入图片描述

为了她苦练这吉他

当初调断了几根弦

为了弹她爱听的歌

手上长满了茧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值