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 }'
常用命令 →