Linux下的I/O与管道

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下的I/O与管道相关的知识,希望对你有一定的参考价值。

阅读目录

  • 1. 标准输入输出

  • 2.输入输出重定向

  • 3.tr命令

  • 4. 管道和tee

  • 5.练习




 1、标准输入输出

    (1)linux 给程序提供三种I/O设备

       标准输入 :(STDIN)    — 0   默认接受来自键盘的输入

       标准输出 :(STDOUT) — 1   默认输出到终端窗口

       标准错误 :(STDEER)  — 2   默认输出到终端窗口


    (2)输入设备有:键盘、鼠标、扫描仪、摄像头等

       输出设备有:打印机、显示器、投影仪等


2、输入输出重定向

     〉正确输出

     2〉错误输出

     &〉全部输出(覆盖重定向)

    >文件内容会被覆盖

   set -C :禁止将内容覆盖已有文件,但可追加  

   >| file :强制覆盖

   set +C 允许覆盖

   >> 原有内容基础上,追加内容   

     文件不存在时,>和>> 都能创建新文件,文件已存在时 >表示覆盖,>>表示追加

   2>&1 把错误的结果转成正确的结果

   1>&2 把正确的结果转成错误的结果

  ():合并多个程序的STDOUT

     cal 2007;cal 2008

(cal 2007 ; cal 2008 ) >all.txt

 

** 3、tr命令   

 tr 转换和删除字符

 tr  [OPTION] ....SET1[SET2]


选项:

 -c -C --complement:取字符集的补集

 -d --delete:删除所有属于第一个字符集的字符

技术分享图片

  -s --squeeze-repeats:把连续重复的字符以单独的一个字符表示

 技术分享图片

    -t --truncate-set1:将第一个字符集对应字符转换为第二字符集对应的字符

    技术分享图片

  

 从文件中导入STDIN

  (1) 使用<来重定向标准输入

  (2)某些命令能够接受从文件中导入的STDIN

   Tr a-z A-Z< /etc/issue   该命令会把/etc/issue中的小写字符都转换成大写字符

    技术分享图片   

   3) tr -d abc  < /etc/fstab     删除fstab文件中的所有abc中任意字符

  (4) cat > file 

     Mage

  wangxiaochun   

 按ctrl+d离开,可以使用文件来代替键盘的输入


使用“<<终止词”把多行重导向给STDIN

技术分享图片


4、管道和tee

    使用符号“|”表示,用来连接命令

    命令1 | 命令2 | 命令3 ...

 组合多种工具的功能:

    ls | tr `a-z` `A-Z`

    less : 一页一页的查看输入     ls -l /etc | less

    mail :通电子邮件发送输入     echo "test email" | mail -s "test" [email protected]


  tee:从标准输入读取,写入到标准输出,并保存到文件中 

   技术分享图片


5、练习

 1、计算1+2+3+..+99+100的总和  

   echo 1+2|bc  echo {1..100}  echo {1...100} |tr " "+|bc

 2、 一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:Hello, I am 用户名,The system version is here,please help me to check it ,thanks操作系统版本信息  

   echo -e Hello,I am `whoami`,The system version is here,Please help me to check it,Thanks."\n"`cat /etc/redhat-release` | mail -s help root

 3、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
    who | tr [a-z] [A-Z] > /tmp/who.out

 4、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

    cat /etc/issue |tr a-z A-Z > /tmp/issue.out

 6、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格

   echo "xt.,l 1 jr#hat-releasemn 2 c*/fe 3 uz 4" | tr -cd [:digit:][:blank:]

 7、将PATH变量每个目录显示在独立的一行

   echo $PATH |tr : "\n"

   














        

        

以上是关于Linux下的I/O与管道的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统编程---进程I/O

Linux重定向与管道简述

linux基础知识-I/O重定向,管道

linux I/O重定向及管道

Linux学习第五节课-标准I/O和管道

初学Linux之标准I/O和管道