bash的IO重定向及管道

版权声明:Mr.O版权所有 转载请标明出处 https://blog.csdn.net/qq_28189423/article/details/83759079


程序:指令+数据
    读入数据 input
    输出数据 output
    
    打开的文件都有一个fd:file descripter(文件描述符)
    
    标准输入设备:键盘 0
    标准输出设备:显示器 1
    标准错误输出设备:显示器 2
    
    I/O重定向:改变标准位置即为重定向
    
    输出重定向:    【只重定向正确输出】
    命令 > 新位置 覆盖重定向
    命令 >> 新位置  追加重定向
    
    set -C  禁止对已有文件进行覆盖输出重定向
    如果需要强制覆盖,使用>|
    
    set +C  允许对已有文件进行覆盖输出重定向
    
    
    错误输出重定向   【只重定向错误输出】
    2>  覆盖重定向
    2>>  追加重定向
    
    
    如果需要同时重定向正确输出和错误输出
    可以同时指定输出重定向文件和错误输出重定向文件
    例如:
    使用覆盖的形式
    cat 3.txt 1.txt > right.txt 2> wrong.txt
    使用追加的形式
    cat 3.txt 1.txt >> right.txt 2>> wrong.txt
    指定为同一个文件
    cat 3.txt 9.txt >> right.txt 2>> right.txt
    
    或者使用&合并输出为同一个数据流进行重定向
    &>  合并覆盖
    &>>  合并追加
    
    
    输入重定向 
    tr abc ABC
    默认对于标准输入进行替换
    
    这里我们使用 < 重定向标准输入,对源文件的内容进行替换后输出
    tr abc ABC < 源文件
    
    或者对源文件的内容进行替换后输出到新文件
    tr abc ABC < 源文件 > 目标文件
    
    
    比较特殊的是<< 这里不是表示追加,我们使用<<表示此处生成文档
    例如:
    cat << EOF
    cat >> example.txt <<EOF
    当我们输入其他内容的时候,将内容追加到example.txt
    当我们输入EOF,则保存文件example.txt
    
    
    管道:
    将前一个命令的输出结果作为第二个命令的输入
    第二个命令的输出作为第三个命令的出入……
    
    注意:最后一个命令会在当前shell进程的子shell进程中执行。
    
    命令1|命令2|命令3|……
     例如:
     cat test2.txt|tr test TEST
     
     
    tee 目标文件
    从标准输入读取数据,同时输出到标准输出和目标文件
    例如:    
    tee a.txt
    echo "$PATH" | tr 'a-z' 'A-Z' | tee b.txt
    
    
    文件处理工具
    wc   统计字符行数,数量,单词数量
        -l  line
        -w  words
        -c  character
        
    cut  分割文件
        -d 指明分隔符
        -f  
            数字 精确的第n个部分
            a,b,c  a b c 部分
            m-n   m到n部分
            混合使用  1-3,5
    以= 分割文件 显示分割的第一部分
    cut -d'=' -f 1 /etc/sysconfig/network-scripts/ifcfg-eth0
    
    以= 分割文件 显示分割的第二部分
    cut -d'=' -f 2 /etc/sysconfig/network-scripts/ifcfg-eth0
    
    以= 分割文件 显示分割的第一部分和第二部分
    cut -d'=' -f 1-2 /etc/sysconfig/network-scripts/ifcfg-eth0
    
    
    sort   排序
    默认比较每行的第一个字符,按照字母表中的升序排列
        -r  降序排列
        -f  忽略字符的大小写
        -t  字段分隔符
        -k  以指定字段为标准排序  
        
        以=作为分隔符 以第一个部分作为标准进行排序
        sort -t= -k1 /etc/sysconfig/network-scripts/ifcfg-eth0
        以=作为分隔符 以第二个部分作为标准进行排序
        sort -t= -k1 /etc/sysconfig/network-scripts/ifcfg-eth0
        
        -n 以数值大小排序 (默认是以字符排序)
        -u 排序后去重
        
        获取history中的命令并去重
        history |cut -d' ' -f5|sort -u
        
        
        uniq命令
            -c 显示每行重复出现的次数
            -d 仅显示重复过的行
            -u 仅显示不曾重复的行
        
        获取history中的命令以及重复次数
        history |cut -d' ' -f5|sort|uniq -c
        
        提示:uniq 不会检查重复的行,除非它们是相邻的行。
如果您想先对输入排序,使用没有uniq 的"sort -u"。

猜你喜欢

转载自blog.csdn.net/qq_28189423/article/details/83759079