管道(Pipe)是Linux/Unix系统中一个强大的特性,它允许将一个命令的输出直接作为另一个命令的输入,实现数据的连续处理和转换。下面我将详细介绍管道命令的使用方法和常见应用场景。
管道使用竖线符号 |
连接命令:
command1 | command2 | command3 ...
示例1:查找特定进程并统计数量
ps aux | grep nginx | wc -l
示例2:显示文件内容并过滤空行
cat file.txt | grep -v "^$"
示例1:排序文件内容
cat data.txt | sort
示例2:去重并统计出现次数
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr
示例1:将文件内容转换为大写
cat file.txt | tr '[:lower:]' '[:upper:]'
示例2:提取特定列并格式化输出
ls -l | awk '{print $3, $9}' | column -t
示例1:多步处理日志文件
cat server.log | grep "ERROR" | awk '{print $4, $5}' | sort | uniq -c
示例2:监控系统资源
top -b -n 1 | head -n 12 | tail -n 6
命令组合 | 功能描述 |
---|---|
grep -v pattern |
排除匹配pattern的行 |
sort -n |
按数值排序 |
sort -r |
反向排序 |
uniq -c |
统计重复行数量 |
head -n 10 |
显示前10行 |
tail -n 20 |
显示最后20行 |
awk '{print $1}' |
提取第一列 |
sed 's/old/new/g' |
替换文本 |
tr 'a-z' 'A-Z' |
转换为大写 |
column -t |
表格对齐输出 |
command | tee output.txt | grep "pattern"
find . -name "*.log" | xargs rm
mkfifo mypipe
command1 > mypipe &
command2 < mypipe
awk
替代多个grep
和sed
组合-
表示标准输入,如tar -cf - dir/ | ssh host "tar -xf -"
掌握这些管道技巧可以显著提高Linux环境下的数据处理效率,让您能够快速完成各种复杂的数据转换和分析任务。