标签:标准输入、标准输出、重定向、tr、tee、set -c、set +c
1、标准输入和输出
1)、程序是由指令+数据构成并运行的(数据可以是自有的或者是调用外部的,其中外部的数据来源于键盘输入、文件输入、网卡输入等等,外部调用方式是程序数据来源的主要途径);
读入数据:Input;
输出数据:Output;
打开的文件都有一个fd: file descriptor ( 文件描述符:1、2、3 );
2)、Linux 给程序提供三种I/O 设备:
标准输入(STDIN )-0 默认接受来自键盘的输入
标准输出(STDOUT )-1 默认输出到终端窗口
标准错误(STDERR )-2 默认输出到终端窗口
I/O 重定向:改变默认输入输出位置;
2、把输出和错误重新定向到文件
1)、STDOUT 和STDERR 可以被重定向到文件:
命令 操作符号 文件名
支持的操作符号包括:
> 把 把STDOUT 重定向到文件(文件内容会被覆盖)
2> 把 把STDERR 重定向到文件
&> 把所有输出重定向到文件
>> 原有内容基础上,追加内容
# set -C: 禁止将内容覆盖已有文件, 但可追加
强制覆盖:>|
# set +C: 允许覆盖
2>: 覆盖重定向错误输出数据流;
2>>: 追加重定向错误输出数据流;
2)、标准输出和错误输出各自定向至不同位置:
COMMAND> /path/to/file.out 2> /path/to/error.out
3)、合并标准输出和错误输出为同一个数据流进行重定向:
&> :覆盖重定向
&>> :追加重定向
COMMAND > /path/to/file.out2> &1 (顺序很重要)
COMMAND >> /path/to/file.out 2>> &1
find /etc -name passwd 2>/dev/null
其中():合并多个程序的STDOUT,但是各个命令之间要用分号隔开
#( cal 2007 ; cal 2008 ) > all.txt
4)、使用“<< 终止词”命令从键盘把多行重导向给STDIN,直到终止词位置的所有文本都发送给STDIN,有时被称为就地文本(heretext);
5)、 tr命令-转换和删除字符
tr [OPTION]... SET1 [SET2]
选项:
-c 或——complerment :取字符集的补集
#tr -c ‘a’‘x’< f1,结果是f1文件中不是a的字符(包括空格)全部替换成x
-d 或——delete :删除所有属于第一字符集的字符;
-s 或—squeeze-repeats :把连续重复的字符以单独一个字符表示
-t 或--truncate-set1 :先删除第一字符集较第二字符集多出的字符
使用< 来重定向标准输入
某些命令能够接受从文件中导入的STDIN: :
$ tr ‘a-z’ ‘A-Z’< /etc/issue,该命令会把/etc/issue 中的小写字符都转换成大写字符
$ tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
#cat > filea
mage
wangxiaochun
按ctrl+d 离开,可以使用文件来代替键盘的输入
#cat > filea < fileb,意思是把fileb的数据输入到filea中去
6)、管道(使用符号“| ”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
将命令1 的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
STDERR 默认不能通过管道转发,可利用2>&1或|&实现
# ls | tr ‘a-z‘ ‘A-Z‘
7)、重定向到多个目标
$ 命令1 | tee 名 文件名 | 命令2
把命令1的STDOUT保存在文件名中,然后管道输入给命令2
使用:
保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出
8)、管道的部分应用
less:一页一页地查看输入:
$ ls -l /etc | less
mail:通过电子邮件发送输入:
$ echo "test email" | mail -s"test" user@example.com
lpr:把输入发送给打印机
$ echo "test print" | lpr -P printer_nam
标签:标准输入、标准输出、重定向、tr、tee、set -c、set +c
原文地址:http://11629193.blog.51cto.com/11619193/1832306