Linux学习-标准输入输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-标准输入输出相关的知识,希望对你有一定的参考价值。

标准输入输出重定向—— Linux下任何一个命令的执行,他都会经过下图所示的流程:

技术分享图片



目录

  1.    三种I/O设备

  2.    把I/O重定向入文件

  3.    tr

  4.    使用管道链接命令

  5.    实际案例



一、I/O设备

  • Linux提供了三种I/O设备:

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

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

  标准错误(STDERR)-2默认输出到终端窗口

  • 操作符号:

  1> 或者 > 正确输出到文件 

  2>        错误输出到文件

       >    覆盖

  2>>       追加

    文件存在:>和>>都可以创建新文件

    文件不存在:> 覆盖   >> 追加 


  set -C    禁止覆盖,但可追加

  >|+文件名 强制覆盖

  set +C    允许覆盖

  &>        全部输出文件

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

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

 ()      合并多个程序的输出

      例如:(cal 2007;cal 2008) > all.text

  • tr 转换字符

  例如:

    tr  abcd 123 将a转换成1,b转换成2,cd转换成3

    tr  abc 1234 将a转换成1,b转换成2,c转换成3,4无效

    tr -t abcd 123 将a->1,b->2,c->3,d无效

    tr -d a  将a字符串删除

    echo hello 123 world | tr -cd 0-9  只有留下0-9,将输入文本中不在补集中的所有字符全部删除(有点绕)

  运行结果截图

    tr -s ab  将多个连续的a和b转换成一个a和b

    tr a [:punct:] 会报错

  • < 输入重定向

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

   cat > file   然后输入内容,Ctrl+d离开   变相的一种输入方式

   cat > file3.txt < /etc/fstab    将fstab的内容复制到file3.txt

视频56.03处截屏

  • << 终止词   ******多用在脚本中******

   cat > file4.txt << EOF

   视屏57.19处截屏


  • | 管道 --将前边的输出的正确结果传递给下一条命令执行

   可以利用 2>&1 | 将错误结果也能传递给管道

   less 翻页查看输出

     ls -l /etc | less

   mail -s "主题" +用户名 --电子邮件发送给指定用户

      用户lisi发送主题为test,内容为hello world 的邮件给用户zhanshan,结果图如下:

技术分享图片

     和管道符结合使用:

         echo hello world | mail -s "test" +username


  • 案例:

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

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

     tr a-z A-z < /etc/issue > /tmp/issue.out

   2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中

     who | tr [a-z] [A-Z] > /tmp/who.out

   3、一个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

   4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开

    ls -1 /root/ |tr "\n" " "

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

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

   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学习-标准输入输出的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习笔记 第六章标准IO和管道

Linux c学习--从标准输入输出看流和缓冲区

Linux学习之路

linux中重定向学习总结

Linux学习笔记——数据流重定向

linux 标准输入输出的详解