458-Linux 三剑客实例详解(grep、sed 、awk)

1、简介

Linux 操作文本的三大利器分别是 grep、sed 、awk,简称三剑客。

  • 大师兄 awk:最擅长取列
  • 二师兄 sed:最擅长取行
  • 三师兄 grep:最擅长过滤

2、正则表达式

在这里插入图片描述

3、大师兄-awk

  • awk对文本进行格式化的工具,适合处理比较复杂的格式处理。

命令格式:

awk [options] 'pattern  {acticon}' file1 file2, ...

其中:

  • options参数:输入分隔符,默认以空白字符分隔,通过 -F 选项来执行分隔符

  • commands 是真正awk命令,printawk打印指定内容的主要命令;

  • file1 file2是待处理的文件;

  • pattern部分决定动作语句何时触发及触发事件:BEGINEND

3.1、options 参数

options 参数: 输入分隔符,默认以空白字符分隔,通过 -F 选项来执行分隔符

$1 分割出来的第一段(第1列),$2分割出来的第二段(第2列),依次类推,$0代表所有字段。


演示:

我们使用awk分割meminfo这个文件:

在这里插入图片描述

只显示第1列:

awk `{print $1}` /proc/meminfo

在这里插入图片描述


如果我们想在打印第1列之前再打印出一些字段:

在这里插入图片描述

awk `{print ”meminfo:” $1}` /proc/meminfo

在这里插入图片描述


将ls的执行结果进行分割,awk配合使用管道符号|

在这里插入图片描述

ls -l | awk '{print $1}'

在这里插入图片描述
打印多列:

ls -l | awk '{print $1 $2}'

这个时候第2列就和第1列合在一起了:

在这里插入图片描述
我们将其分开,加一个制表符\t

ls -l | awk '{print $1 "\t" $2}'

在这里插入图片描述

再加第3列:

ls -l | awk '{print $1 "\t" $2 "\t" $3}'

在这里插入图片描述

将所有的数据都打印出来:($0

ls -l | awk '{print $0}'

在这里插入图片描述


面试题:

问题:文件名为urls,我们需要将域名提取出来!

在这里插入图片描述

此时我们需要更改分割的符号了,不能使用默认的符号来分割文件了!

awk -F '/' '{print $3}' urls

为什么是$3?

  • 以新的分隔符\作为列的划分标准!

在这里插入图片描述

  • //的坐标http:为第1列;
  • //中间的空的为第2列;
  • www.baidu.com为第3列;

在这里插入图片描述


输出分隔符

  • 默认情况下输出分隔符空格,使用内置变量 OFS 来设定输出分隔符,需要加上 -v 选项。
awk -v OFS="-->" '{print $1,$2}' test

在这里插入图片描述


3.2、awk 变量

  • FS:输入字段分隔符,默认空白字符,一般需要加 -F
  • OFS:输出字段分隔符,默认是空格,一般需要加 -v
  • NF:分隔后的字段数量;
  • NR:当前行的行号;

3.3、pattern模式

pattern 模式: 模式是条件,符合条件的行, awk 才会进行处理;

awk -F '#' 'NF==5 {print $1}' test

如果行的分段数量为5 的话(分段式用#分的),进行打印操作,其他的类似,如 NF>2,NF<4,$1==1234 等都是判断条件;

在这里插入图片描述

awk -F '#' 'NF>=4 && NF<=5 {print $1}' test

在这里插入图片描述

4、二师兄 – sed

  • sed 是一种流编辑器,它一次处理一行内容
  • 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”;
  • 接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕

sed 命令格式:

sed [options]... 'script' inputfile

4.1、选项

-n:不输出模式空间内容到屏幕,即不自动打印
-e:多点编辑
-f /PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
-r:支持使用扩展正则表达式
-i:直接编辑文件
-i.bak:备份文件并原处编辑

4.2、script 地址定界

1、不给地址:对全文进行处理

2、单地址

  • #:指定的行; $:最后一行;
  • /pattern/:被此处模式所能够匹配到的每一行;

4.3、编辑命令

d 删除模式空间匹配的行,并立即启用下一轮循环
p 显示符合条件的行,追加到默认输出之后
a [\]text1 在指定行后面追加文本,支持使用\n实现多行追加
i [\]text 在行前面插入文本
c [\]text 替换行为单行或多行文本
w /path/somefile 保存模式匹配的行至指定文件
r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,s@@@,s###

4.3、替换标记

g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中

4.4、实例

sed -n 2p test #打印第 2 行内容

在这里插入图片描述


sed -n 2,5p test #打印第 2--5 行内容

在这里插入图片描述


sed -i 's/a/v/g' test 将文件中的 a 全部替换为 v 
「sed替换格式是:sed -i ‘s/要替换的内容/替换成的内容/g' 文件名」

在这里插入图片描述

5、三师兄 – grep

  • grep 强大的文本搜索工具,根据模式搜索文本,并将符合模式的文本行显示出来

grep 命令格式:

grep 【option】 pattern 【file】
-i:忽略字符大小写
-n:显示匹配的行号
-v:显示没有被匹配的行
--color:将匹配的字符以高亮颜色标记出来
-c:统计匹配的行数
-o:仅显示匹配到的字符串
-q:静默模式,不输出任何信息
-e:实现多个选项间的逻辑 or 关系
-v:反转查找
-w:匹配整个单词
-A:after ,显示后行
-B:before ,显示前行
-C:context,显示前后行
-E:相当于 egrep,即 grep -E = egrep

5.1、实例说明

grep -i 'b' test #在文件 test 中查找字符 b

在这里插入图片描述


grep -q 'abc' test 静默执行。
不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。
一般用于条件测试

在这里插入图片描述


grep -n 'v' test 查找包含字符 v 的行数

在这里插入图片描述


grep -nv 'v' test 查找不包含字符 v 的行数

在这里插入图片描述


grep -n v$ test 查找以 v 结尾的行

在这里插入图片描述


grep -v 'v' test 反向查找,没有v

在这里插入图片描述


grep 'ljl' -A 2 test 输出匹配结果行的后 2

在这里插入图片描述


grep 'wooow' -B 2 test 输出匹配结果行的前 2

在这里插入图片描述


grep -n 'abc' test1 test2 test3 或 
grep -n 'abc' test* 
多个文件查找匹配的结果行

6、参考

Linux 三剑客实例详解「grep、sed 、awk」

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liufeng2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值