标准I/O和管道
- 标准输入和输出
- IO重定向
- tr
- 管道
- tee
标准输入和输出
程序:指令+ 数据
读入数据:Input
输出数据:Output打开的文件都有一个fd: file descriptor ( 文件描述符)
标准输入:0
标准输出:1
错误输出:2
- Linux 给程序提供三种I/O 设备
标准输入(STDIN )-0 默认接受来自键盘的输入
标准输出(STDOUT )-1 默认输出到终端窗口
标准错误(STDERR )-2 默认输出到终端窗口
IO重定向
改变文件保存的默认位置
- 标准输出和错误输出重定向
格式:命令 操作符号 文件名
支持的操作符号包括:
> 把标准输出重定向到文件
>> 把输出内容重定向追加到文件末尾
2> 把错误输出重定向到文件
2>> 把错误输出数据流追加到文本末尾
&> 把所有输出重定向到文件
&>> 把所有的输出追加重定向到文件末尾
如何关闭重定向覆盖文本内容功能:
set –C 禁止将内容覆盖 已有文件, 但可追加
>| file 强制覆盖
set +C 允许覆盖
标准输出和错误输出各自定向至不同位置
commamd > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
合并多个程序的标准输出:
( cal 2007 ; cal 2008 ) > all.txt
快速清除file文件内容:
# > file
- 输入重定向
使用 < 来重定向标准输入
某些命令能够接受从文件中导入的标准输入
tr ‘a-z’ ‘A-Z’< /etc/issue
该命令会把/etc/issue 中的小写字符都转换成写写字符
tr –d abc < /etc/fstab 删除fstab 文件中的所有abc 中任意字符
tr:转换和删除字符
语法: tr 选项 参数
选项:
-c 或 ——complerment:取代所有不属于第一字符集的字符;
-d 或 ——delete:删除所有属于第一字符集的字符;
-s 或 --squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t 或 --truncate-set1:先删除第一字符集较第二字符集多出的字符。
参数:
字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。
但执行删除操作时,不需要参数“字符集2”;可以使用文件名通配符
字符集2:指定要转换成的目标字符集。
实例:
# echo "TANK" |tr A-Z a-z #大写字母转小写
# echo "hello 123 world 456" | tr -d '0-9' #删除字符串中的数字
# cat text | tr '\t' ' ' #将制表符转换成空格
# echo "aa.,a 1 b#$bb 2 c*/cc 3 ddd 4" | tr -dc '0-9 \n' # 删除除数字外的字符
# tr '[:lower:]' '[:upper:]' #将小写字符转换成大写字符
管道
连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
管道(使用符号“| ”表示)用来连接命令
命令1 | 命令2 | 命令3 |
将命令1的 标准输出 发送给命令2 的 标准输入 ,
命令2的 标准输出 发送到命令3 的 标准输入
错误输入 默认不能通过管道转发,可利用2>&1 或 或 |& 实现
最后一个命令会在当前shell 进程的子shell 进程中执行用来
例如: 把/etc/passwd文件的前6行的信息转换为大写字符后输出;
head -n 6 /etc/passwd | tr 'a-z' 'A-Z'
一页一页地查看输入
ls -l /etc | less
tee:重定向到多个目标
语法: tee 选项 参数
选项:
-a:向文件中重定向时使用追加模式;
-i:忽略中断(interrupt)信号。
参数:文件:指定输出重定向的文件。
实例:
ls | tee out.txt #将当期目录的详细内容保存在out.txt文件内
ls | tee out.txt | cat -n #将当期目录的详细内容保存在out.txt文件内,并且打印出带有行号内容