zoukankan      html  css  js  c++  java
  • glob及IO重定向

    (一)bash的基础特性

    • globbing:文件名通配
      • *:匹配零或零个以上的任意字符
      • ?:匹配任意的单个字符,不可以为零个
      • []:匹配指定范围内的任意单个字符,有几种特殊格式
        • [a-z]/[A-Z]:任意一个字母,注意不区分大小写,p[a-z]a,外面的p和a区分大小写,里面的a-z不区分
        • [[:upper:]]:匹配一个大写字母,外层的中括号是通配符,里面的所有的表示一个范围
        • [[:lower:]]:匹配一个小写字母
        • [[:alpha:]]:匹配一个字母
        • [[:digit:]]:匹配一个数字
        • [[:alnum:]]:匹配一个字母或数字,等于[[:alpha:][:digit:]]
        • [[:space:]]:匹配一个空白字符
        • [[:punct:]]:匹配一个标点符号
        • [0-9]:任意一个数字
        • [a-z0-9]:任意一个字母或者数字
        • [abcxyz]:从六个字母中匹配一个
      • [^]:匹配指定范围外的任意单个字符
        • [^[:upper:]]:非大写字母
        • [^0-9]:非数字

    (二)IO重定向及管道

    • 可用于输入的设备(一切皆文件)
      • 键盘,文件系统上的常规文件,网卡
    • 可用于输出的设备(一切皆文件)
      • 显示器,文件系统上的常规文件,网卡
    • 程序的数据流有三种
      • 输入的数据流:<--标准输入(stdin)是键盘
      • 输出的数据流:-->标准输出(stdout)是显示器
      • 错误输出流:   -->错误输出(stderr)是显示器
    • fd:file descriptor/文件描述符/Windows中叫做文件句柄
      • 标准输入:0
      • 标准输出:1
      • 错误输出:2
    • IO重定向
      • 输出重定向:>
        • 例如:cat /etc/issue > /tmp/issue.out;
        • 再例如:cat /etc/issue > /dev/tty1
        • 这样写很危险:cat /etc/issue > /dev/sda
        • 属于覆盖输出重定向。如果使用>>就是追加输出重定向
        • set -C:
          • 禁止覆盖输出重定向至已存在的文件。
          • 可以使用“>|”强制覆盖重定向
          • 仅对当前shell进程有效
          • set +C取消限制
      • 错误输出重定向:2>
        • 例如:cat /etc/issue1 2> /tmp/issue.err
        • 覆盖输出,2>>是追加输出
      • 合并正常输出流和错误输出流:&>
        • 覆盖输出,&>>是追加输出
        • 还有一种写法:cat /etc/issue >> /tmp/issue.out 2>&1
      • 特殊设备:/dev/null
        • 数据黑洞
        • 例如:head -1 /etc/passwd &> /dev/null;echo $?。就是想看看这个文件有没有第一行,不关心结果,只关心命令执行状态结果。
      • 输入重定向:<
        • <<后面加结束符,表示输入结束。
          • 例如:cat > /tmp/cat.out << EOF
      • 介绍一个tr命令
        • tr [OPTION]...SET1[SET2]
        • 把输入的数据当中的字符,凡是在SET1定义范围内出现的,统统对位转换为SET2中出现的字符。如果加-d,则不需要SET2,此时会把和SET1匹配的删除。
        • 例如:tr abc ABC
        • 该命令只能从标准输入读取输入,如果后面跟文件会出错
        • 所以可以使用输入重定向:tr abc ABC < /etc/issue。注意,不会修改源文件,只是将结果输出到屏幕中。
    • 管道
      • 连接程序,实现将前一个命令的输出直接定向给后一个命令当作输入数据流
      • 用法:COMMAND1 | COMMAND2 | COMMAND3 | 。。。
      • 例如:cat /etc/issue | tr 'a-z' 'A-Z'
      • 再例如:who | head -2 | tr -d '0-9'
      • Linux的重要思想之一:组合小程序,完成复杂任务
      • tee命令既可以将前一个命令的输出保存或者输出,又可以继续往后传。例如:cat /etc/issue | tee /tmp/issue.tee | tr 'a-z' 'A-Z'

    练习1:把/etc/passwd文件的前6行的信息转换为大写字母后输出

    答案:head -n 6 /etc/passwd | tr 'a-z' 'A-Z'

    新命令总结:tr,tee

  • 相关阅读:
    网络协议
    窗口TOPMOST属性设置失败
    自绘之----对话框
    图书推荐
    MFC自绘之WM_ERASEBKGND
    批处理获取当前路径
    checkBox 自绘
    第四章:基于TCP套接字编程(三)
    第四章:基于TCP套接字编程(二)
    第四章:基于TCP套接字编程(一)
  • 原文地址:https://www.cnblogs.com/jacky1982/p/7622467.html
Copyright © 2011-2022 走看看