码迷,mamicode.com
首页 > 其他好文 > 详细

重定向和管道 I/O

时间:2016-07-31 16:07:22      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:标准输入、标准输出、重定向、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


重定向和管道 I/O

标签:标准输入、标准输出、重定向、tr、tee、set -c、set +c

原文地址:http://11629193.blog.51cto.com/11619193/1832306

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!