在 Linux 世界中,“三剑客”通常指的是三个非常强大且常用的文本处理工具:grep、sed 和 awk。它们各自擅长不同的任务,但结合起来可以完成复杂的文本处理工作。以下是对这三个工具的详细介绍:
1. grep
用途:grep 是一个用于搜索文本的工具,能够根据正则表达式匹配文件中的行。
基本用法
grep "pattern" filename
"pattern":要查找的字符串或正则表达式。
filename:要搜索的文件名。如果省略文件名,则从标准输入读取。
常见选项
-
-i
:忽略大小写。 -
-v
:反向匹配,即显示不包含模式的行。 -
-r
:递归搜索目录下的所有文件。 -
-n
:显示匹配行的行号。 -
-E
:使用扩展正则表达式(ERE)。
示例
- 基本搜索
grep "hello" file.txt
- 忽略大小写搜索
grep -i "hello" file.txt
- 反向匹配
grep -v "hello" file.txt
- 递归搜索
grep -r "hello" /path/to/directory
2. sed
用途:sed 是一个流编辑器,主要用于对输入流(文件或管道)进行基本的文本转换和过滤。
基本用法
sed 's/old-pattern/new-pattern/' filename
- 's/old-pattern/new-pattern/':替换命令,将 old-pattern 替换为 new-pattern。
- filename:要处理的文件名。如果省略文件名,则从标准输入读取。
常见选项 -
-i
:直接修改文件内容。 -
-e
:允许多个编辑命令。 -
-n
:静默模式,只打印经过处理。
示例
- 基本替换
sed 's/foo/bar/' file.txt
- 直接修改文件
sed -i 's/foo/bar/' file.txt
- 多次替换
sed -e 's/foo/bar/' -e 's/hello/world/' file.txt
4.仅打印匹配行
sed -n '/pattern/p' file.txt
- 删除特定行
sed '3d' file.txt # 删除第3行
sed '/pattern/d' file.txt # 删除包含pattern的行
3. awk
用途:awk 是一种编程语言,专门用于处理和分析文本文件。它擅长按列处理数据,并且可以执行复杂的文本操作。
基本用法
awk '{action}' filename
-
{action}
:对每行执行的操作。 -
filename
:要处理的文件名。如果省略文件名,则从标准输入读取
常见选项 -
-F
:指定字段分隔符。 -
-v
:定义变量。
1。打印文件的第二列
awk '{print $2}' file.txt
2.使用逗号作为分隔符
awk -F',' '{print $2}' file.csv
3.条件筛选
awk '$2 == "foo" {print $0}' file.txt # 打印第二列为"foo"的行
4.计算总和
awk '{sum += $1} END {print sum}' file.txt # 计算第一列的总和
5.多条件处理
awk '$1 > 10 && $2 == "foo" {print $0}' file.txt # 打印第一列大于10且第二列为"foo"的行
总结
grep:用于搜索文本,支持正则表达式匹配。
sed:用于文本替换和过滤,适合简单的文本编辑任务。
awk:功能强大的文本处理工具,适合复杂的数据处理和分析任务。