美文网首页Linux 课堂笔记
2018-06-01 课堂笔记

2018-06-01 课堂笔记

作者: chocolee911 | 来源:发表于2018-06-04 11:22 被阅读0次

    目录

    1. cut
    2. sort
    3. wc
    4. uniq
    5. tee
    6. tr
    7. split
    8. 扩展知识

    1. cut

    数据截取, 以行为单位进行

    1.1 用法

    echo $PATH | cut -d '<keyword>' -f <fields>

    1.2 选项

    • -d 'x': delimiter, 设定用以分隔数据的分隔符, 与-f一起使用
    • -f #:field, 选择每行需要截取的以 -d 指定的符号或关键字进行分隔的区域, 从1开始, 与-f一起使用
    • -c #-#:characters, 以字符为单位进行分隔, 后接字符区间

    1.3 示例

    • 以':'为分隔符, 截取 PATH 变量中的第一个路径
      cut -d ':' -f 1
    [root@choco-01 ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@choco-01 ~]# echo $PATH | cut -d ':' -f 1
    /usr/local/sbin
    
    • 截取 history 命令显示的信息中的命令部分
      history 5 | cut -c 7-
    [root@choco-01 tmp]# history 5 | cut -c 7-
     which cd
     cd /tmp/
     ls
     vim aaa
     history 5 | cut -c 7-
    
    • 截取 history 命令显示的信息中的排序字段(注意: history命令的显示结果是以空格开始的)
      history 5 | cut -c 2-5
    [root@choco-01 tmp]# history 5 | cut -c 2-5
    1085
    1086
    1087
    1088
    1089
    

    2. sort

    排序用. 既然是排序, 就会涉及语系、以英文or数字进行排序等内容
    2.1 用法
    sort [-fbMnrtuk] [file or stdin]

    2.2 选项

    • -f:忽略大小写
    • -b:忽略最前面的空格部分
    • -M:以月份进行排序,如:JAN,Feb,...,Dec
    • -n:以纯数字进行排序(默认是以字母进行排序)
    • -r:反响排序
    • -u:相当于uniq,相同的数据只出现一行
    • -t:分隔符,默认是 tab 键
    • -k:以哪个 field 来进行排序,常与 -t 配合使用

    2.3 示例

    • 进行默认排序
    [root@choco-01 ~]# head -5 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    
    
    [root@choco-01 ~]# head -5 /etc/passwd | sort 
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    
    • 以 UID 字段对 /etc/passwd 进行排序
    [root@choco-01 ~]# head -10 /etc/passwd | sort -t ':' -k 3
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    
    • 注意到上例中 operator 那一行了吗?怎么11排到了这里?——因为没有采用数字排序法
    [root@choco-01 ~]# head -10 /etc/passwd | sort -t ':' -k 3 -n
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin                      # 这会就OK啦
    

    3. wc

    如果想知道某个文件或输出信息的行数、字符数、字数,怎么办?
    —— world counts 用 wc

    3.1 用法

    wc -[lwm]

    3.2 选项

    • 无选项:同时列出行数、词数、字符数
    • -l:仅列出行数
    • -w:仅列出词数
    • -m:仅列出字符数

    3.3 示例

    • 显示文件的行数、词数、字符数
    [root@choco-01 ~]# wc /etc/passwd
      24   36 1120 /etc/passwd
    
    • 仅显示行数 or 词数 or 字符数
    [root@choco-01 ~]# wc /etc/passwd -l
    24 /etc/passwd
    [root@choco-01 ~]# wc /etc/passwd -w
    36 /etc/passwd
    [root@choco-01 ~]# wc /etc/passwd -c
    1120 /etc/passwd
    

    4. uniq

    去重。排完序后,重复的内容显示太多?或者想统计每种重复的内容出现了几次?
    —— 用uniq

    4.1 用法

    uniq -[ic]

    4.2 选项

    • -i:忽略大小写
    • -c:计算每种内容重复的次数

    4.3 示例

    [root@choco-01 ~]# last | cut -d ' ' -f 1 | sort | uniq
    
    reboot
    root
    wtmp
    [root@choco-01 ~]# last | cut -d ' ' -f 1 | sort | uniq -c
          1 
         30 reboot
         61 root
          1 wtmp
    

    5. tee

    双重重定向。之前讲过重定向,不是输出到文件就是输出到屏幕,怎样同时输出到文件和屏幕呢?
    —— 双重重定向,tee

    5.1 用法

    <command> | tee <file_name>

    5.2 选项

    • -a:以追加方式进行重定向(默认是以覆盖方式进行)

    5.3 示例

    • 默认以覆盖方式进行重定向

      [root@choco-01 ~]# ls | tee ls.txt
      anaconda-ks.cfg
      expect-test
      ls.txt

    [root@choco-01 ~]# cat ls.txt 
    anaconda-ks.cfg
    expect-test
    ls.txt
    
    
    [root@choco-01 ~]# ls /tmp/ | tee ls.txt 
    nano-2.3.1-10.el7.x86_64.rpm
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
    yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
    
    
    [root@choco-01 ~]# cat ls.txt                              # 原先的内容不见了
    nano-2.3.1-10.el7.x86_64.rpm
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
    yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
    
    • 以追加方式进行重定向
    [root@choco-01 ~]# cat ls.txt 
    nano-2.3.1-10.el7.x86_64.rpm
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
    yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
    
    
    [root@choco-01 ~]# ls | tee -a ls.txt 
    anaconda-ks.cfg
    expect-test
    ls.txt
    
    
    [root@choco-01 ~]# cat ls.txt                       # 这次原内容没被覆盖
    nano-2.3.1-10.el7.x86_64.rpm
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
    systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
    yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
    anaconda-ks.cfg
    expect-test
    ls.txt
    

    6. tr

    常用于关键字的删除与替换,但功能基本可以靠 sed 替代

    6.1 用法

    tr -[ds] <keywords>

    6.2 选项

    • -d <keyword>
    • -s

    6.3 示例

    • 删除特定字符
    [root@choco-01 /]# head -5 /etc/passwd | tr -d ':'   #冒号不见了
    rootx00root/root/bin/bash
    binx11bin/bin/sbin/nologin
    daemonx22daemon/sbin/sbin/nologin
    admx34adm/var/adm/sbin/nologin
    lpx47lp/var/spool/lpd/sbin/nologin
    
    • 替换字符
    [root@choco-01 /]# head -5 /etc/passwd | tr '[a-z]' '[A-Z]'
    ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
    BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
    DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
    ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
    LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
    

    7. split

    文件太大,想要切割开来?
    —— 用 split

    7.1 用法

    split -[lb] <file_name> <rename_Prefix>

    7.2 选项

    • -b #k:以容量进行切割,后接容量,可带单位如:b、k、m等
    • -l #:以行数进行切割,后接行数

    7.3 示例

    • 按行数切割文件
    [root@choco-01 ~]# cat split.test 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    [root@choco-01 ~]# split -l 2 split.test SPLIT
    
    
    [root@choco-01 ~]# ls SP*
    SPLITaa  SPLITab  SPLITac  SPLITad  SPLITae
    [root@choco-01 ~]# cat SPLITaa
    1
    2
    
    • 按容量切割文件
    [root@choco-01 ~]# ll -h split.text 
    -rw-r--r-- 1 root root 10M Jun  4 10:45 split.text
    
    
    [root@choco-01 ~]# split -b 3M split.text SP               #以3M为单位进行切割
    
    
    [root@choco-01 ~]# ll -h SP*                                        #从头切到尾,发现剩了1M,单独成为文件
    -rw-r--r-- 1 root root 3.0M Jun  4 10:48 SPaa
    -rw-r--r-- 1 root root 3.0M Jun  4 10:48 SPab
    -rw-r--r-- 1 root root 3.0M Jun  4 10:48 SPac
    -rw-r--r-- 1 root root 1.0M Jun  4 10:48 SPad
    

    扩展知识

    相关文章

      网友评论

        本文标题:2018-06-01 课堂笔记

        本文链接:https://www.haomeiwen.com/subject/nbhesftx.html