Linux 「grep、sed 、awk」详解

简介

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

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

正则表达式

元字符功能说明
^匹配行首表示以某个字符开头
$匹配行尾表示以某个字符结尾
^$空行表示空行
.匹配任意单个字符,包括 0 次表示匹配一个非换行符的任意字符
*匹配 0 个或多个字符表示可重复的任意多个字符
[ ]匹配指定范围内的任意单个字符表示过滤中括弧内的任意单个字符
[^]匹配不在指定范围内的字符表示排除指定范围内的字符
.*匹配任意长度任意字符,不包括 0 次 表示任意多个字符
匹配子串表示匹配子串
&搜索字符用来替换其他字符表示搜索的字符来替换替他字符
\<匹配单词的开始表示单词的开始,其后面的任意字符必须作为单词的首部出现
\>配单词的结束表示单词的结束,其前面的任意字符必须作为单词的尾部出现
x{m}出现次数,至少 m 次表示统计字符 x 的出现次数,至少 n 次
x{m,n}出现次数,至少 m 次,不多于 n 次表示统计字符 x 的出现次数,在 m 和 n 之间
\?匹 符 1 次或 0 次表示统计前面的字符出现 1 次或 0 次

*** 三位师兄闪亮登场啦 ***

大师兄 – AWK

awk 是对文本进行格式化的工具,适合处理比较复杂的格式处理。
有多个版本: 1、new awk: nawk ;2、gawk, awk
awk 命令格式:
awk [options] ‘script’ file1 file2, …

awk [options] ‘PATTERN {acticon}’ file1 file2, …

格式说明:

pattern部分决定动作语句何时触发及触发事件:BEGIN、END

action 对数据进行处理,放在{}内指明:print、printf

最常用的是 print,默认以空白字符分隔

$0 代表整行,$1 代表第 1 段, 2 代表第 2 段,以此类推, 2 代表第 2 段,以此类推, 2代表第2段,以此类推,NF 代表最后一个字段,多个字段直接用逗号隔开

awk ‘{print $1, $2}’ xxx.log

打印操作支持拼接打印,如:awk ‘{print “first” $1, $2}’ xxx.log

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

awk -F ‘#’ ‘{print $1,$2}’ test
在这里插入图片描述
输出分隔符,默认情况下输出分隔符是空格,使用内置变量 OFS 来设定输出分隔符,需要加上 -v 选项

awk -v OFS=“–>” ‘{print $1,$2}’ test

在这里插入图片描述
5. awk 变量

FS:输入字段分隔符,默认空白字符,一般需要加 -F

OFS:输出字段分隔符,默认是空格,一般需要加 -v

NF:分隔后的字段数量

NR:当前行的行号

 6. 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

在这里插入图片描述

二师兄 – sed

sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
sed 命令格式:
sed [options]… ‘script’ inputfile

选项

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

script 地址定界

不给地址:对全文进行处理
单地址:
#:指定的行; $:最后一行

/pattern/:被此处模式所能够匹配到的每一行

编辑命令

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

替换标记:

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

sed -n 2p test 打印第 2 行内容
在这里插入图片描述
sed -n 2,5p test 打印第 2–5 行内容

在这里插入图片描述

mac 上执行上述命令会报错 sed: 1: "test": undefined label 'est.txt'
 
解决方案:增加一个备份的追加名【sed -i '.bak' 's/a/v/g' test】
 
原因:mac强制要求备份,否则报错 
当然可以不使用其他备份名字,只是用'',就可以只保留一份

sed -i '' 's/a/v/g' test

在这里插入图片描述

三师兄 – grep

grep 强大的文本搜索工具,根据模式搜索文本,并将符合模式的文本行显示出来。
gerp 命令格式:
grep 【option】 pattern 【file】

option:

  • -i:忽略字符大小写

  • -n:显示匹配的行号

  • -v:显示没有被匹配的行

  • –color:将匹配的字符以高亮颜色标记出来

  • -c:统计匹配的行数

  • -o:仅显示匹配到的字符串

  • -q:静默模式,不输出任何信息

  • -e:实现多个选项间的逻辑 or 关系

  • -v:反转查找

  • -w:匹配整个单词

  • -A:after ,显示后行

  • -B:before ,显示前行

  • -C:context,显示前后行 使用grep -E命令过滤eg:如passwd文件中root字符前没有字符的行、root字符后没有字符的行

  • -E:相当于 egrep,即 grep -E = egrep

实例说明:

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 反向查找

在这里插入图片描述
文章转载自:https://blog.csdn.net/lanse_rain/article/details/105969155
如有侵权,请联系作者

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值