管道与重定向
Posted Linuxbugs(卡西莫多伯伯)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管道与重定向相关的知识,希望对你有一定的参考价值。
目录
重定向
转换和删除字符tr
从文件中导入STDIN
把多行发送给STDIN
管道
重定向到多个目标
重定向
先说什么是标准输入输出,我们从键盘上敲击,然后输入到我们的电脑中,这是标准的输入,那么什么是标准输出呢,我们在经过一系列正确的操作得到的能在屏幕上显示出来的输出是标准输出。那不正确的操作产生的能显示在屏幕上的信息是啥呢,那就是标准错误。
标准输入(STDIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
我们可以将我们的操作进行重定向,将信息输入到文件当中去,我们可以通过这样的操作去观察一下操作信息,或我们进行的错误信息。
>:把标准输出(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
转换和删除字符(tr)
格式:tr [option] .. set1 set2
作用:转换和删除字符
选项:
-c:取字符集的补集
-d:删除所有属于第一字符集的字符
-dc:删除其补集
-s:把连续重复的字符集以单独的一个字符表示
-t:将第一个字符集对应的字符转换第二字符集对应的字符(默认)
对应的字符:
[:digit:]:数字
[:alpha:]:字母
[:lower:]:小写字母
[:upper:]:大写字母
[:alnum:]:字母和数字
[:punct:]:标点符号
[:space:]:空白字符
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
从文件中导入STDIN
使用<来重定向标准输入
某些命令能够接受从文件中导入的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
直到 终止词 位置的所有文本都发送给STDIN
有时被称为就地文本(heretext)
例如:
1 [root@CT71 tmp]# mail -s "HELP" root << END
2 > Hello
3 > My name is Shanghai,May I know your name?
4 > END
管道
管道命令无疑是我们在今后操作Linux经常会用带的命令,它的作用是将我们在上一步操作产生的正确的标准输出使用管道后面的命令继续进行操作,如ls /etc/* | grep passwd,是不是我们有操作产生的标准的错误输出就无法进行管道处理了呢,并不是的,我们可以使用2>&1或|&进行将产生的标准错误输出 交给下一个命令执行。
管道中的—符号
这个符号就像一个临时介质,我们可以将我们处理的信息暂时存在这个介质里,然后交给管道后面的命令继续对介质中的信息继续处理。这样,我们就不必将我们在第一步处理的信息先存在磁盘上在进行下一步操作了,十分的方便。
重定向到多个目标(tee)
格式:command_1 | tee [-a] file_name | command_2
作用:把命令1的STDOUT保存到文件中作为命令2的输入
选项:-a:追加
作用:保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出
以上是关于管道与重定向的主要内容,如果未能解决你的问题,请参考以下文章