记录linux中三剑客的使用方法,方便自己回忆。
一、grep - 文本搜索利器
1.1 什么是grep?
grep(Global Regular Expression Print)是一个强大的文本搜索工具,它可以使用正则表达式搜索文件中的指定内容,并将包含匹配内容的行输出。
1.2 基本语法
grep [选项] 匹配模式 文件名
1.3 常用选项
-i
: 忽略大小写-n
: 显示行号-v
: 显示不匹配的行-w
: 精确匹配单词-c
: 只显示匹配行数-r
: 递归搜索目录-E
: 支持扩展正则表达式(等同于egrep)
1.4 实用示例
- 基本搜索:
grep "root" /etc/passwd # 搜索包含"root"的行
grep -i "ROOT" /etc/passwd # 忽略大小写搜索
grep -n "root" /etc/passwd # 显示行号
- 正则表达式搜索:
grep "^root" /etc/passwd # 搜索以root开头的行
grep "bash$" /etc/passwd # 搜索以bash结尾的行
grep -E "root|admin" /etc/passwd # 搜索包含root或admin的行
二、sed - 流编辑器
2.1 什么是sed?
sed(Stream Editor)是一个流编辑器,它可以对输入的文本进行添加、删除、修改等操作。最重要的是,sed可以在不打开文件的情况下编辑文件。
2.2 基本语法
sed [选项] '命令' 文件名
2.3 常用选项
-n
: 抑制自动输出-i
: 直接修改文件内容-e
: 执行多条命令-r
: 支持扩展正则表达式
2.4 常用命令
p
: 打印d
: 删除s
: 替换a
: 追加i
: 插入c
: 更改
2.5 示例
- 显示指定行:
sed -n '1p' file.txt # 显示第一行
sed -n '1,5p' file.txt # 显示1-5行
- 删除操作:
sed '1d' file.txt # 删除第一行
sed '/^$/d' file.txt # 删除空行
- 替换操作:
sed 's/old/new/' file.txt # 替换每行第一个匹配
sed 's/old/new/g' file.txt # 替换所有匹配
4. 追加操作:
sed -i '1i\Hello World' test.txt #在文件开头插入一行文本:
sed -i.bak '1i\Hello World' test.txt #修改文件并备份(-i.bak):
三、awk - 文本处理神器
3.1 什么是awk?
awk是一个强大的文本分析工具,它不仅是工具还是一门编程语言。awk把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
3.2 基本语法
awk [选项] '模式{动作}' 文件名
3.3 常用内置变量
$0
: 当前整行内容$1
,$2
…: 当前行的第1、2…个字段NF
: 当前行的字段数NR
: 当前行号FS
: 输入字段分隔符OFS
: 输出字段分隔符
3.4 实用示例
- 基本字段处理:
awk '{print $1}' file.txt # 打印第一列
awk '{print $1,$3}' file.txt # 打印第一和第三列
- 条件处理:
# 打印第三列大于100的行
awk '$3>100' file.txt
# 打印包含root的行
awk '/root/' /etc/passwd
- 统计计算:
# 计算第三列的总和
awk '{sum+=$3} END{print sum}' file.txt
# 计算第三列的平均值
awk '{sum+=$3} END{print sum/NR}' file.txt
四、高级应用示例
4.1 组合使用
这三个工具可以通过管道组合使用,发挥更强大的功能:
# 查找包含root的行,替换root为admin,只显示第一列
grep "root" /etc/passwd | sed 's/root/admin/g' | awk -F: '{print $1}'
4.2 实际应用场景
- 日志分析
# 统计Apache访问日志中访问量最大的5个IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5
- 系统监控
# 监控CPU使用率超过80%的进程
ps aux | awk '$3>80{print $2,$3,$11}'
五、使用方式
- 选择合适的工具
- grep: 适合文本搜索和过滤
- sed: 适合文本替换和编辑
- awk: 适合复杂的文本处理和统计分析
- 执行效率
- 对于简单的文本搜索,优先使用grep
- 需要替换文本内容时,优先使用sed
- 需要处理结构化数据时,使用awk
- 调试技巧
- 在使用sed的-i选项前,先不用-i测试命令是否正确
- 处理重要文件前先备份
- 对于复杂的awk脚本,可以分步调试
六、总结
- grep专注于文本搜索
- sed专注于文本编辑
- awk专注于文本分析