在Linux中,几乎所有的命令的返回数据都是纯文本,而纯文本形式的数据又是绝大多数命令的输入格式,这就让多命令协作成为可能。Linux的命令行为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。
命令行shell的数据流定义:
名称 说明 编号 默认
STDIN 标准输入 0 键盘
STDOUT 标准输出 1 终端
STDERR 标准错误 2 终端
管道和重定向
分类 关键字 定义
> 将1重定向到文件(覆盖形式)
>> 将1重定向到文件(追加形式)
2> 将2重定向到文件(覆盖形式)
重定向 2>&1 将2和1结合
< 重定向0
管道 | 将一个命令的1作为另外一个的0
基于关键字的搜索
grep 'peter' /etc/passwd
find / -user peter | grep Video
-i 在搜索的时候忽略大小写
-n 显示结果所在行
-v 输出不带关键字的行
-Ax 在输出的时候包含结果所在行之后的指定行数
-Bx 在输出的时候包含结果所在行之前的指定行数
基于列处理文本
cut -d: -f1 /etc/passwd
grep peter /etc//passwd | cut -d: -f3
-d指定分割字符(默认是TAB)
-f指定输出的列号
-c基于字符进行切割 cut -c2-6 /etc/passwd 显示结果的2-6个字符
文本统计
wc peter
-l 只统计行数
-w 只统计单词
-c 只统计字节数
-m 只统计字符数
文本排序
sort peter
-r 进行倒序排序
-n 基于数字进行排序
-f 忽略大小写
-u 删除重复行 unip 删除相邻的重复行
-t c 使用C作为分割符分割为列进行排序
-k x 当进行基于指定字符分割为列的排序时,指定基于哪个列排序
文本比较
diff peter peter-new
-i 忽略大小写
-b 忽略空格数量的改变
-u 统一显示比较信息(一般用以生成.path文件补丁)diff -u peter peter-new > final.path
处理文本内容
tr -d 'TMD' < peter 删除关键字
tr 'a-z' 'A-Z' < peter 转换大小写