标准I/O和管道

标准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文件内,并且打印出带有行号内容

猜你喜欢

转载自blog.csdn.net/lv8549510/article/details/80255911