• shell:IO重定向、管道符


    1.重定向:

      程序 = 指令 + 数据

      重定向:在程序中,数据如何输入?又如何输出?

        数据输入:键盘 -- 标准输入,但是并不是唯一输入方式

                -- stdin

                例如:添加用户的代码 给一个user.txt文本,文本里有1000个用户

                  useradd.sh < user.txt

                    < 标准输入重定向

      重定向分为:标准输入、标准输出、标准错误

        while line;do

          循环体 $line

        done < /etc/passwd

        数据输出:显示器 -- 标准输出,但并不是唯一输出方式

          ls /etc/ > a.txt

        fd文件表示符 0-9 ----相当于给文件分类;

          被定义的文件标识符0:标准输出 1:标准输入 2:标准错误

      常见重定向符号

        1.标准输出

          >:覆盖重定向 ,很危险

          set -C去掉C的功能,C的功能为覆盖重定向的功能 set+C把关闭的功能开启

          >|:强制重定向,在覆盖重定向功能关闭的时候,也可以

          >>:追加重定向

            cat a.txt | more

        2.标准输入

          < :

            tr abc ABC < /etc/passwd > /etc/passwd.bak 把abc替换成ABC,单个字符进行替换

          <<:将多行数据同时输入

            cat >> a.txt <<EOF

            >1

            >2

            >3

            >EOF

        3.错误输出

          2>    2>>

          不需要输出内容,只需要输出状态:

            ls /etc/ > /dev/null 2> /dev/null

            if [$? -eq 0];then

              循环体

            fi

          &> &>> == 2&>1

            ls /etc/ &>/dev/null   不管结果正确不正确,结果都重定向到null

    2.管道符

      command1|command2|command3|......

      第一个命令的执行结果交给后一条命令来执行

      【Linux思想:结合小功能实现大功能】

        free -m | grep "^Mem" | cut -d ' ' -f19

        free -m | grep "^Mem" | awk '{print $3}'

      find 【目录】 -name ab* -type f -perm 600 -mtime +7 | xargs rm -rf

      tee 一路输入,两路输出    覆盖

      tee /tmp/tee.out  即在屏幕输出一次,又保存到文件里

    练习:

      将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中

        head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out

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

        who | tail -3 | cut -d' ' -f1 | tr [[:lower:]] [[:upper:]] | tee/tmp/who.out

          tail   查看文件尾部多少行(默认是10行)

            -n  tail -n 5 ==tail -5

            -f   实时查看文件更新内容

          head   查看文件头部多少行(默认10行)

            -n   head -n 5==head -5

    3.文本处理工具

    wc

      word count 统计文本文件中的字符个数

      用法:wc -【】 filename

      -l   行

      -w   字

      -c    大小

      -m    字符

    cut

      从一个本文文件中提取文本列

      用法:cut -d" " -f fileds

         cut -c 字符区间

        -d   后面接分割字符,与-f一起使用

        -f   依据-d分成的数段,用-f是取第几段的意思

        -c   以字符的单位取出固定字符区间

        --output-delimiter=" "

      分割用:输出用制表符tab

        cut -d":" -f1,3 --output-delimeter="  " /etc/passwd

        【cut的局限性:1、-d指定分隔符不能同时指定多个 2、不能做高级的格式化输出;所以要熟练掌握awk】

    sort 排序命令

      -n   按照数字大小排列

      -r   逆序

      -n   排序后去重

    uniq  去重

      连续且相同的才被视为重复

      建议先排序再去重

      -c  统计某些字符重复的次数

      -i   忽略大小写的不同

      -n  只显示不重复的行

  • 相关阅读:
    经典笔试题:用C写一个函数测试当前机器大小端模式
    一个结构体传递方式的问题
    ESP8266 NON-OS SDK 和 RTOS SDK实现GPIO中断不同点
    关于C语言中内存的3个问题
    ESP8266 station模式下建立client、server TCP连接
    连续更新了42天早报之后
    简单socket()编程
    TCP协议学习
    linux系统如何管理文件
    Linux文件操作的主要接口API及相关细节
  • 原文地址:https://www.cnblogs.com/lyali/p/11313098.html
Copyright © 2020-2023  润新知