Linux行处理命令是文本处理和系统管理中的核心工具,它们能够高效地对文本文件进行逐行操作,如过滤、转换、统计等,这些命令通常通过管道(|)连接,形成强大的处理链,以下将详细介绍常用的Linux行处理命令及其应用场景。

基础行处理命令
- cat:用于显示文件内容,常与其他命令结合使用。
cat file.txt | grep "keyword"
可在文件中搜索包含关键词的行。 - tac:与cat相反,按行倒序显示文件内容,适用于需要从后向前分析日志的场景。
- nl:显示文件内容时附带行号,便于定位特定行。
nl -ba file.txt
会为所有行(包括空行)编号。
过滤与搜索命令
- grep:强大的文本搜索工具,支持正则表达式。
grep -E "error|warning" log.txt
可同时匹配包含"error"或"warning"的行;grep -v "debug" log.txt
则排除包含"debug"的行。 - sed:流编辑器,用于对文本进行编辑(替换、删除、插入等)。
sed 's/old/new/g' file.txt
将文件中所有"old"替换为"new";sed -n '1,5p' file.txt
仅显示前5行。 - awk:强大的文本分析工具,支持按字段处理。
awk '{print $1, $3}' file.txt
每行仅显示第1和第3字段;awk -F: '{print $1}' /etc/passwd
以冒号为分隔符显示用户名。
排序与去重命令
- sort:对行进行排序。
sort -n file.txt
按数字排序;sort -k2,2 file.txt
按第2字段排序;sort -u file.txt
去除重复行。 - uniq:相邻行去重或统计重复次数。
sort file.txt | uniq
先排序后去重;uniq -c file.txt
统计每行重复次数。
统计与提取命令
- wc:统计行数、字数、字节数。
wc -l file.txt
统计行数;wc -w file.txt
统计单词数。 - cut:提取指定列或字符。
cut -d: -f1 /etc/passwd
以冒号为分隔符提取第1列;cut -c1-5 file.txt
提取每行前5个字符。 - head/tail:显示文件开头或结尾部分。
head -n 10 file.txt
显示前10行;tail -f log.txt
实时跟踪文件新增内容。
高级组合应用
通过管道组合命令可实现复杂处理。
- 统计日志文件中访问次数最多的IP:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -5
- 提取CSV文件中第3列大于100的行:
awk -F, '$3 > 100 {print}' data.csv
- 删除文件中的空行:
sed '/^$/d' file.txt
命令对比与选择
功能需求 | 推荐命令组合 | 示例场景 |
---|---|---|
搜索特定内容 | grep | 日志关键词检索 |
替换或修改文本 | sed | 批量替换配置文件中的路径 |
按字段处理 | awk | 分析日志文件中的状态码分布 |
排序与去重 | sort + uniq | 提取唯一IP地址列表 |
实时监控文件 | tail -f | 追踪应用日志的实时更新 |
性能优化技巧
- 对于大文件,优先使用
grep
或awk
的-f
参数(从文件读取模式)避免复杂正则表达式。 - 使用
xargs
处理大量行,如find . -name "*.log" | xargs grep "error"
。 - 避免不必要的管道链,例如用
awk
直接完成过滤和统计,而非grep | cut | wc
。
相关问答FAQs
Q1: 如何使用awk同时满足多个条件?
A1: 在awk中使用逻辑运算符。awk '$1 > 100 && $2 < 200 {print}' file.txt
表示仅显示第1字段大于100且第2字段小于200的行,也可以用表示或条件,表示非条件。
Q2: sed如何实现多行替换或删除?
A2: 使用sed的N
命令读取下一行,再结合地址范围操作,删除连续的空行:sed '/^$/N;/^\n$/d' file.txt
,多行替换可通过地址范围实现,如sed '2,5s/old/new/g' file.txt
替换第2至5行的内容。
