grep 对文本内容进行过滤 筛选 sed 流编译器,对文件或是数据流进行加工处理 awk 格式化输出

# grep

指令 描述
-n 显示行数
-i 不区分大小写
-v 根据搜索条件取反
-c 统计总和
-o 只显示匹配到的内容

# 表达式

指令 描述
. 匹配任意的一个且只有一个字符、不能匹配空行
* 匹配前一个字符0次或1次以上,重复0次表示空,即匹配所有内容
.* 组合符,匹配所有内容
^ 匹配以什么开始
^$ 匹配空行
$ 匹配以什么结束

# egrep 扩展正则(grep -E 相同)

# 表达式

指令 描述
+ 表示匹配前一个字符1次或多次
? 表示匹配前一个字符0次或1次
() 将一个或多个字符绑定到一起,当做一个整体进行处理

# sed

语法:sed [选项] [sed内置命令符号] [输入文件]

参数 描述
-n 取消默认 sed 的输出,常与 sed 内置命令 p 一起使用
-i 直接将修改结果写入文件,不用 -i、sed 修改的是内存数据
-e 多次编辑,不需要管道符了
-r 支持正则扩展

内置命令字符

参数 描述
a 多文本追加,在指定文本前
d 删除匹配的行
i 表示插入文本,在指定行前添加一行/多行文本
p 打印匹配的内容
s/正则/替换内容/g 正则匹配内容,然后替换内容,结尾g代表全局匹配

# demo

1、打印 2-3 行

sed "2,3p" a.txt -n // p:表示打印 -n:表示取消默认输出

2、从第2换行开始向下打印3行

sed "2,+3p" a.txt -n

3、过滤出含有 linux 的字符串

sed "/linux/p" a.txt -n

4、删除含有 linux 的行

sed "/linux/d" a.txt

5、M 替换 i

sed "s/M/i/g" a.txt

6、多次替换

sed -e "s/A/a/g" -e "s/B/b/g" a.txt -i // -i 写入文件

7、在第 n 行 添加数据

sed "na abcd" a.txt -i // 注意这里的 na n:表示第几行 a:表示追加

# awk

语法:awk [可选参数option] 'pattern[action]' file

awk {print $1} // $1 表示第一列 $0 表示一整行 默认使用空格分割

# 参数

参数 描述
-F 指定分隔符
-v 定义或修改一个 awk 内部的变量
-f 从脚本文件中读取awk命令

# demo

NR 在 awk 中表示行号 NF 字段数量的意思

1、显示文件第五至六行

awk 'NR==5,NR==6{print $0}' a.txt

2、倒数第二列

awk '{print $1,$(NF-1)}' a.txt

# 提取包含 xxx 的行

awk '/xxx/'

示例:提取包含 browser_download_url 的行的第二个字段

curl -s https://api.github.com/repos/variadico/noti/releases/latest | awk '/browser_download_url/ { print $2 }' 
最后更新时间: 6/11/2024, 12:21:23 PM