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

  • 相关阅读:
    eclipse中的Invalid text string (xxx).
    在jsp文件中出现Unknown tag (c:out)
    eclipse 界面复原
    ecilpse 纠错插件
    Multiple annotations found at this line:- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port.
    调用第三方https接口
    调用第三方http接口
    创建带值枚举
    spring整合redis之Redis配置文件
  • 原文地址:https://www.cnblogs.com/jacky1982/p/7622467.html
Copyright © 2011-2022 走看看