linux 标准IO和管道

tr 转换和删除字符
 tr [OPTION]... SET1 [SET2]
选项:
Image [7]
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
 [:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字
[:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号
[:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符


程序:指令+数据
    读入数据:Input
    输出数据:Output
    打开的文件都有一个fd: file descriptor (文件描述符)
    Linux给程序提供三种I/O设备
标准输入(STDIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
    I/O重定向:改变默认位置
 
STDOUT和STDERR可以被重定向到文件
命令 操作符号 文件名
支持的操作符号包括:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
> 文件内容会被覆盖
set –C 禁止将内容覆盖已有文件,但可追加
>| file 强制覆盖
set +C 允许覆盖
>> 原有内容基础上,追加内容
 
2> 覆盖重定向错误输出数据流
2>> 追加重定向错误输出数据流
标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
 &> 覆盖重定向
 &>> 追加重定向
 COMMAND > /path/to/file.out 2>&1 (顺序很重要)
 COMMAND >> /path/to/file.out 2>&1
 ():合并多个程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt
 
 
重定向的测试
ls a.txt b.txt 将输出一条标准输出和一条标准错误。
如下:
a.txt:(用A表示)
ls: cannot access b.txt: No such file or directory(用B表示)
下面讨论各种变形的输出结果和原因:
1、ll a.txt b.txt 1>file 2>&1 file内容A和B 屏幕内容无 (因为标准输出定向到文件,标准错误定向到标准输出,所以也定向到文件)
Image
2、ll a.txt b.txt 2>&1 1>file file内容B 屏幕输出A (因为标准错误定向到了标准输出即屏幕,标准输出定向到文件)
Image [2]
3、ll a.txt b.txt 2>file 1>&2 file内容A和B 屏幕内容无(因为标准错误定向到文件,标准输出定向到标准错误,所以也定向到文件)
Image [3]
4、ll a.txt b.txt 1>&2 2>file file内容A 屏幕输出B(因为标准输出定向到了标准错误及屏幕,标准错误定向到文件)
Image [4]
5、ll a.txt b.txt 1>file 1>&2 file内容无 屏幕内容A和B (因为标准输出定向到文件,标准输出又定向的标准错误即屏幕,覆盖了1>file,所以file内容无)
Image [5]
6、ll a.txt b.txt 2>file 2>&1 file内容无 屏幕内容A和B (因为标准错误定向到文件,标准错误又定向到标准输出即屏幕,覆盖了2>file,所以file内容无)
Image [6]
 
 
 
使用<来重定向标准输入
某些命令能够接受从文件中导入的STDIN
tr ‘a-z’ ‘A-Z’< /etc/issue
该命令会把/etc/issue中的小写字符都转换成写写字符
tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
cat > file
mage
wangxiaochun
按ctrl+d离开,可以使用文件来代替键盘的输入
Cat > filea < fileb
 
使用“<<终止词”命令从键盘把多行重导向给STDIN
直到 终止词 位置的所有文本都发送给STDIN
有时被称为就地文本(heretext)
mail -s "Please Call" <<END
> Hi ,
>
> Please give me a call when you get in. We may need
> to do some maintenance on server1.
>
> Details when you're on-site
> END

 
|  管道
管道左边的命令必须要有标准输出的功能,管道右边的命令一道要有标准输入功能的否者没有意义。
 
管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
    将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
    STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
    最后一个命令会在当前shell进程的子shell进程中执行用来
    组合多种工具的功能
ls | tr ‘a-z’ ‘A-Z
Image [8]
 

猜你喜欢

转载自blog.csdn.net/shi7876061/article/details/79826596