zoukankan      html  css  js  c++  java
  • 初学Linux之标准I/O和管道

    标准输入和输出

    程序是由指令+数据组成
    程序的数据流有三种:

    输入数据流:<–标准输入(stdin),一般默认是键盘
    输出数据流:–>标准输出(stdout),一般默认到终端窗口
    错误输出流:–>标准错误(stderr),一般默认到终端窗口

    标准输入:0
    标准输出:1
    错误输出:2

    I/O重定向:改变默认位置

    输出重定向将标准输出(stdout)和标准错误(stderr)重定向到指定位置

    格式: 命令 操作符号 文件名

    支持的操作符号:
    > :把标准输出(stdout)重定向到文件,会覆盖原文件内容
    >> :把标准输出(stdout)重定向到文件,会在原有内容基础上,追加内容

    说明:上面是讲ll显示的结果输出重定向到文件file中,使用>时,file文件被覆盖了,使用>>时,原文件file和重定向的内容都显示了,是追加内容

    2> :把标准错误(stderr)重定向到文件,会覆盖原内容
    2>>:把标准错误(stderr)重定向到文件,会在原内容基础上,追加内容

    说明:将命令执行的错误结果显示在file文件中,使用2>时,覆盖了原文件file输出的,使用2>>时,原文 件内容和标准错误都显示了,是追加内容

    &>:把所有的输出重定向到文件,不管对错都输出到指定位置,覆盖输出
    &>>:把所有的输出重定向到文件,不管对错都输出到指定位置,追加输出

    说明:使用&>或者&>>时,执行ll时,是标准输出,lls是标准错误,但是不管是哪个的输出都重定向到file 文件中,2>&1和&>,&>>效果一样,2>&1是老版本使用,要在最后使用,才有效果。

    command >/path/toshmefile 2>&1
    command>>/path/to/somefile 2>&1
    理解:A和B,将A输出到B上,如果对了,就正常输出到B上,如果错误了,内容还是输出在B上

    set -C:禁止将内容覆盖已有的文件,但是可以追加强制覆盖 :
    set +C:允许覆盖

    合并多个程序的标准输出
    (command ;command)>file

    说明:将ll和echo shell的标准输出一起重定向到file文件中,此法只能用于标准输出,
    标准错误不能使用

    tr:转换和删除字符

    tr [option] .. SET1 [SET2]==>[]非必选

    选项:
    -c:取字符的补集==>取代所有不属于第一字符集的字符
    -d:删除所有属于第一个字符集的字符
    -s:把连续重复的字符以单独一个字符表示
    -t:将第一个字符集对应字符转换为第二字符集对应的字

    管道使用符号|来连接命令
    command1 |command2 |command3…
    1.将命令1的标准输出发送给命令2,作为命令2的标准输入,命令2的标准输出发给command3,作为command3 的标准输入….
    2.标准错误默认不能通过管道转发,但是可以利用2>&1或者|&实现
    3.最后一个命令会在当前shell 进程的子shell 进程中执行
    4.可以组合多种工具

    tee命令:

    command1 |tee filename | command2
    把command1的标准输出保存在文件中,然后管道输入给command2

    特点:

    1.保存不同阶段的输出
    2. 复杂管道的故障排除
    3.同时查看和记录输出 

    练习
    1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
    ls /etc/issue  |tr "a-z" "A-Z" </tmp/issue.out
    2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
    who am i |tr "a-z" "A-Z" 
    3、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
    ls /root/ |tr  '
    ' ' ' 
    4、计算1+2+3+..+99+100的总和
    echo {1..100}|tr ' ' '+' |bc 
    5、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
    echo "xt.,l 1 jr#-dmn 2 c*/fe 3 uz 4" |tr -dc '0-9'' '
    6、将PATH变量每个目录显示在独立的一行
    echo $PATH |tr ":" "
    "
    7、将指定文件中0-9分别替代成a-j
    cat /etc/issue | tr '0-9' 'a-j'
    8、将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行
    cat /etc/centos-release | tr " " "
    "
     
     

  • 相关阅读:
    利用bat合并两个hex文件
    Laravel中使用自己的类库三种方式
    Carbon 的 diffForHumans 方法
    5 个 Laravel Eloquent 小技巧
    laravel 批量更新
    laravel 打印sql语句
    PHP获取客户端的IP地址
    PHP跨域访问
    解析URL参数
    转: 雅虎35条优化黄金守则
  • 原文地址:https://www.cnblogs.com/yaun1498078591/p/8805312.html
Copyright © 2011-2022 走看看