鸟叔的Linux私房菜补充
Linux“三剑客”:grep,awk,sed
grep
- grep -i 不区分大小写
- grep -n 显示行号
- grep -c 计算多少行包含指定的字符串
- grep -Bn -Am 显示匹配行的前n行,后m行
- grep -v反向查找,查找不包含某个字符串的行
- grep -e pat1 -e pat1 …匹配满足多个条件之一的行,pat1,pat2之间是或的关系
- grep -E 使用扩展的正则表达式进行查找
awk
awk ‘[pattern]{action}’ filename #必须使用单引号
- awk -F 指定分割符,默认分割符是空格
- awk -v 设置变量
- awk ‘pattern’ filename 帅选符合某种条件的行
- awk常用内建变量
变量 | 描述 |
---|---|
NR | 行号,从1开始 |
FILENAME | 当前文件名 |
- awk -f awk脚本 文件名
sed
- 新增 a
例子 | 说明 |
---|---|
sed ‘2a testContent’ test.txt | 在第 2 行后面新增一行内容 |
sed ‘1,3a testContent’ test.txt | 在原文的第 1~3 行后面各新增一行内容 |
- 整行替换 c
例子 | 说明 |
---|---|
sed ‘2c testContent’ test.txt | 将第 2 行内容整行替换 |
sed ‘1,3c testContent’ test.txt | 将第 1~3 行内容替换成一行指定内容 |
- 删除 d
例子 | 说明 |
---|---|
sed ‘2d’ test.txt | 删除第 2 行 |
sed ‘1,3d’ test.txt | 删除第1~3行 |
- 部分替换s
例子 | 说明 |
---|---|
sed ‘s/old/new/’ test.txt | 匹配每一行的第一个old替换为new |
sed ‘s/old/new/gi’ test.txt | 匹配所有old替换为new,g 代表一行多个,i 代表匹配忽略大小写 |
sed ‘3,9s/old/new/gi’ test.txt | 匹配第 3~9 行所有old替换为new |
若不指定行号,则每一行都操作
对比
grep常用于查询
awk用于高级的格式化输出
sed用于对文件的修改