• Linux管线命令


    一、什么是管线命令

    bash 命令运行的时候有输出的数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来配置? 这就牵涉到管线命令的问题了 (pipe) ,管线命令使用的是『 | 』这个界定符号

    例:

    [root@www ~]# ls -al /etc | less
    
    
    如此一来,使用 ls 命令输出后的内容,就能够被 less 读取,并且利用 less 的功能,我们就能够前后翻动相关的信息了!

    管线命令主要有两个比较需要注意的地方:

    • 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
    • 管线命令必须要能够接受来自前一个命令的数据成为 standard input 继续处理才行。
    二、常用的管线命令

    ①  截取命令  cut , grep

    Ⅰ、 cut 命令

    cut 主要的用途在于将『同一行里面的数据进行分解!』最常使用在分析一些数据或文字数据的时候! 这是因为有时候我们会以某些字符当作分割的参数,然后来将数据加以切割,以取得我们所需要的数据。

    语法:

    [root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符
    
    [root@www ~]# cut -c 字符区间            <==用于排列整齐的信息
    
    选项与参数:
    
    -d  :后面接分隔字符。与 -f 一起使用;
    
    -f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
    
    -c  :以字符 (characters) 的单位取出固定字符区间;
    
    
    例一:

    [root@localhost ~]# echo $PATH
    /usr/java/jdk1.7.0_79/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost ~]# echo $PATH | cut -d ':' -f 3-5           --> 按分号分割$PATH ,并取第三个到第五个显示
    /usr/local/bin:/sbin:/bin
    
    例二:

    [root@localhost ~]# export
    declare -x CLASSPATH=".:/usr/java/jdk1.7.0_79/lib/dt.jar:/usr/java/jdk1.7.0_79/lib/tools.jar"
    declare -x G_BROKEN_FILENAMES="1"
    declare -x HISTCONTROL="ignoredups"
    declare -x HISTSIZE="1000"
    declare -x HOME="/root"
    declare -x HOSTNAME="localhost.localdomain"
    declare -x JAVA_HOME="/usr/java/jdk1.7.0_79"
    declare -x LANG="en_US.UTF-8"
    declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
    declare -x LOGNAME="root"
    declare -x MAIL="/var/spool/mail/root"
    declare -x OLDPWD
    declare -x PATH="/usr/java/jdk1.7.0_79/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
    declare -x PWD="/root"
    declare -x SHELL="/bin/bash"
    declare -x SHLVL="1"
    declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
    declare -x TERM="vt100"
    declare -x USER="root"
    
    [root@localhost ~]# export | cut -c 12-                                            -- >去掉前面的 declare -x 
    CLASSPATH=".:/usr/java/jdk1.7.0_79/lib/dt.jar:/usr/java/jdk1.7.0_79/lib/tools.jar"
    G_BROKEN_FILENAMES="1"
    HISTCONTROL="ignoredups"
    HISTSIZE="1000"
    HOME="/root"
    HOSTNAME="localhost.localdomain"
    JAVA_HOME="/usr/java/jdk1.7.0_79"
    LANG="en_US.UTF-8"
    LESSOPEN="|/usr/bin/lesspipe.sh %s"
    MAIL="/var/spool/mail/root"
    OLDPWD
    PATH="/usr/java/jdk1.7.0_79/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
    PWD="/root"
    SHELL="/bin/bash"
    SHLVL="1"
    SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
    TERM="vt100"
    USER="root"
    
    Ⅱ、 grep 命令

    语法:

    [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
    
    选项与参数:
    
    -a :将 binary 文件以 text 文件的方式搜寻数据
    
    -c :计算找到 '搜寻字符串' 的次数
    
    -i :忽略大小写的不同,所以大小写视为相同
    
    -n :顺便输出行号
    
    -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
    
    --color=auto :可以将找到的关键词部分加上颜色的显示!
    
    
    
    例一:

    [root@localhost ~]# last | grep 'elgin'   -->  last 的结果当中,显示出包含有elgin字符串的行
    elgin    pts/0        192.168.108.1    Wed Dec 16 02:50 - 02:54  (00:04)    
    elgin    tty1         :0               Wed Dec 16 02:49 - down   (02:09)    
    elgin    tty3                          Tue Dec 15 20:41 - crash  (00:13)    
    elgin    pts/0        :0.0             Tue Dec 15 20:15 - 20:35  (00:20)    
    elgin    tty1         :0               Tue Dec 15 20:11 - crash  (00:43)    
    elgin    pts/0        :0.0             Tue Dec 15 05:17 - 05:18  (00:01)    
    elgin    pts/0        :0.0             Tue Dec 15 05:13 - 05:13  (00:00)    
    elgin    tty1         :0               Tue Dec 15 04:54 - crash  (15:15)    
    elgin    tty7         :0               Tue Dec 15 04:30 - down   (00:11)    
    例二:

    [root@localhost ~]# last | grep -v 'root' --> last结果当中,显示出不包含root字符串的行
    reboot   system boot  2.6.32-431.el6.x Mon Dec 21 11:33 - 21:22 (3+09:48)   
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 20:30 - 11:15 (4+14:44)   
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 04:59 - 20:29  (15:30)    
    elgin    pts/0        192.168.108.1    Wed Dec 16 02:50 - 02:54  (00:04)    
    elgin    tty1         :0               Wed Dec 16 02:49 - down   (02:09)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 02:48 - 04:58  (02:10)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 02:32 - 02:47  (00:15)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 01:12 - 02:31  (01:19)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 00:38 - 01:11  (00:33)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 20:54 - 01:11  (04:16)    
    elgin    tty3                          Tue Dec 15 20:41 - crash  (00:13)    
    elgin    pts/0        :0.0             Tue Dec 15 20:15 - 20:35  (00:20)    
    elgin    tty1         :0               Tue Dec 15 20:11 - crash  (00:43)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 20:09 - 01:11  (05:02)    
    elgin    pts/0        :0.0             Tue Dec 15 05:17 - 05:18  (00:01)    
    elgin    pts/0        :0.0             Tue Dec 15 05:13 - 05:13  (00:00)    
    elgin    tty1         :0               Tue Dec 15 04:54 - crash  (15:15)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 04:53 - 01:11  (20:17)    
    elgin    tty7         :0               Tue Dec 15 04:30 - down   (00:11)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 12:24 - 04:41  (-7:-43)  
    例三:

    [root@localhost ~]# last | grep 'elgin' | cut -d '-' -f 1  --> last结果中,显示出包含elgin的行,并按‘-’ 截取 取第一段
    elgin    pts/0        192.168.108.1    Wed Dec 16 02:50 
    elgin    tty1         :0               Wed Dec 16 02:49 
    elgin    tty3                          Tue Dec 15 20:41 
    elgin    pts/0        :0.0             Tue Dec 15 20:15 
    elgin    tty1         :0               Tue Dec 15 20:11 
    elgin    pts/0        :0.0             Tue Dec 15 05:17 
    elgin    pts/0        :0.0             Tue Dec 15 05:13 
    elgin    tty1         :0               Tue Dec 15 04:54 
    elgin    tty7         :0               Tue Dec 15 04:30 
    
    例四:

    [root@localhost ~]# grep --color=auto 'test' /root/catfile    --> test关键字高亮显示
    this is atest
    
    ②  排序命令  sort ,wc ,uniq

    Ⅰ、 sort 命令

    语法:

    [root@www ~]# sort [-fbMnrtuk] [file or stdin]
    
    选项与参数:
    
    -f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
    
    -b  :忽略最前面的空格符部分;
    
    -M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
    
    -n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
    
    -r  :反向排序;
    
    -u  :就是 uniq ,相同的数据中,仅出现一行代表;
    
    -t  :分隔符,默认是用 [tab] 键来分隔;
    
    -k  :以那个区间 (field) 来进行排序的意思
    
    
    例一:

    [root@localhost ~]# cat /etc/passwd | sort  --> 显示文件中的内容,并排序 【从结果来看,默认以首字母来排序】
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    elgin:x:500:500:CenterOs_Seth:/home/elgin:/bin/bash
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    gdm:x:42:42::/var/lib/gdm:/sbin/nologin
    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
    halt:x:7:0:halt:/sbin:/sbin/halt
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
    saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
    seth:x:501:501:seth:/home/seth:/bin/bash
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    tcpdump:x:72:72::/:/sbin/nologin
    usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    例二:

    [root@localhost ~]# cat /etc/passwd | sort -t ':' -k 3   --> 按照分号分割之后的第三栏排序
    root:x:0:0:root:/root:/bin/bash
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    gdm:x:42:42::/var/lib/gdm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
    saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
    rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
    elgin:x:500:500:CenterOs_Seth:/home/elgin:/bin/bash
    seth:x:501:501:seth:/home/seth:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    halt:x:7:0:halt:/sbin:/sbin/halt
    tcpdump:x:72:72::/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    
    例三:

    [root@localhost ~]# last | cut -d ' ' -f1 | sort -u   --> last 结果按空格分割 之后的第一部分 并按字母顺序排序并去重
    
    elgin
    reboot
    root
    wtmp
    
    Ⅱ、 uniq 命令

    作用:去掉重复数据

    语法:

    [root@www ~]# uniq [-ic]
    
    选项与参数:
    
    -i  :忽略大小写字符的不同;
    
    -c  :进行计数
    
    
    例一

    [root@localhost ~]# last | cut -d ' ' -f1 |sort |uniq  --> 通sort命令例3 
    
    elgin
    reboot
    root
    wtmp
    
    [root@localhost ~]# last | cut -d ' ' -f1 | sort | uniq -c     --> 显示各个用户登陆次数
          1 
          9 elgin
         11 reboot
         23 root
          1 wtmp
    
    Ⅲ 、wc命令

    作用:统计文档的信息,比如行数,字数,字符数

    语法:

    [root@www ~]# wc [-lwm]
    
    选项与参数:
    
    -l  :仅列出行;
    
    -w  :仅列出多少字(英文单字);
    
    -m  :多少字符;
    
    例:

    [root@localhost ~]# cat /etc/passwd | wc
         32      46    1481
    

    ③  双重重导向命令 tee

    tee 会同时将数据流分送到文件去与屏幕 (screen);而输出到屏幕的,其实就是 stdout ,可以让下个命令继续处理!

    语法:

    [root@www ~]# tee [-a] file
    
    选项与参数:
    
    -a  :以累加 (append) 的方式,将数据加入 file 当中!
    

    例一

    [root@localhost ~]# last | tee /root/teefile | cut -d ' ' -f1|sort -u   --> 将last的内容存到 /root/teefile 文件同时经过 cut处理之后再显示到屏幕
    
    elgin
    reboot
    root
    wtmp
    [root@localhost ~]# cat /root/teefile
    root     pts/1        :0.0             Mon Dec 21 04:33 - 22:30 (2+17:56)   
    root     pts/0        192.168.108.1    Sun Dec 20 22:49   still logged in   
    root     tty1         :0               Sun Dec 20 22:47   still logged in   
    reboot   system boot  2.6.32-431.el6.x Mon Dec 21 11:33 - 22:21 (3+10:47)   
    root     pts/0        192.168.108.1    Thu Dec 17 20:27 - down  (3+14:47)   
    root     pts/0        192.168.108.1    Wed Dec 16 20:35 - 05:12  (08:37)    
    root     tty1         :0               Wed Dec 16 20:31 - down  (4+14:43)   
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 20:30 - 11:15 (4+14:44)   
    root     pts/0        192.168.108.1    Wed Dec 16 05:02 - down   (15:27)    
    root     tty1         :0               Wed Dec 16 05:02 - down   (15:27)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 04:59 - 20:29  (15:30)    
    root     pts/0        192.168.108.1    Wed Dec 16 02:54 - down   (02:04)    
    root     tty7         :1               Wed Dec 16 02:54 - down   (02:04)    
    elgin    pts/0        192.168.108.1    Wed Dec 16 02:50 - 02:54  (00:04)    
    elgin    tty1         :0               Wed Dec 16 02:49 - down   (02:09)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 02:48 - 04:58  (02:10)    
    root     pts/0        192.168.108.1    Wed Dec 16 02:39 - down   (00:07)    
    root     tty1         :0               Wed Dec 16 02:36 - down   (00:10)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 02:32 - 02:47  (00:15)    
    root     pts/0        192.168.108.1    Wed Dec 16 01:50 - down   (00:41)    
    root     pts/0        192.168.108.1    Wed Dec 16 01:13 - 01:49  (00:36)    
    root     tty1         :0               Wed Dec 16 01:13 - down   (01:17)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 01:12 - 02:31  (01:19)    
    root     tty7         :0               Wed Dec 16 01:02 - down   (00:08)    
    root     pts/0        192.168.108.1    Wed Dec 16 00:56 - 01:10  (00:14)    
    root     pts/0        192.168.108.1    Wed Dec 16 00:56 - 00:56  (00:00)    
    root     tty1         :0               Wed Dec 16 00:40 - 01:02  (00:21)    
    reboot   system boot  2.6.32-431.el6.x Wed Dec 16 00:38 - 01:11  (00:33)    
    root     pts/2        192.168.108.1    Tue Dec 15 21:02 - crash  (03:36)    
    root     pts/1        192.168.108.128  Tue Dec 15 21:00 - 21:02  (00:01)    
    root     pts/0        :0.0             Tue Dec 15 20:55 - 21:02  (00:06)    
    root     tty1         :0               Tue Dec 15 20:55 - crash  (03:42)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 20:54 - 01:11  (04:16)    
    elgin    tty3                          Tue Dec 15 20:41 - crash  (00:13)    
    elgin    pts/0        :0.0             Tue Dec 15 20:15 - 20:35  (00:20)    
    elgin    tty1         :0               Tue Dec 15 20:11 - crash  (00:43)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 20:09 - 01:11  (05:02)    
    elgin    pts/0        :0.0             Tue Dec 15 05:17 - 05:18  (00:01)    
    elgin    pts/0        :0.0             Tue Dec 15 05:13 - 05:13  (00:00)    
    elgin    tty1         :0               Tue Dec 15 04:54 - crash  (15:15)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 04:53 - 01:11  (20:17)    
    elgin    tty7         :0               Tue Dec 15 04:30 - down   (00:11)    
    reboot   system boot  2.6.32-431.el6.x Tue Dec 15 12:24 - 04:41  (-7:-43)   
    
    wtmp begins Tue Dec 15 12:24:43 2015
    

    ④  字符转换命令:

    Ⅰ、tr 命令

    tr 可以用来删除一段信息当中的文字,或者是进行文字信息的替换!

    语法:

    root@www ~]# tr [-ds] SET1 ...
    
    选项与参数:
    
    -d  :删除信息当中的 SET1 这个字符串;
    
    -s  :取代掉重复的字符!
    
    
    例一

    [root@localhost ~]# last | tr '[a-z]' '[A-Z]'     --> 将小写字母转为大写字母
    ROOT     PTS/1        :0.0             MON DEC 21 04:33 - 22:30 (2+17:56)   
    ROOT     PTS/0        192.168.108.1    SUN DEC 20 22:49   STILL LOGGED IN   
    ROOT     TTY1         :0               SUN DEC 20 22:47   STILL LOGGED IN   
    REBOOT   SYSTEM BOOT  2.6.32-431.EL6.X MON DEC 21 11:33 - 22:35 (3+11:01)   
    ROOT     PTS/0        192.168.108.1    THU DEC 17 20:27 - DOWN  (3+14:47)   
    ROOT     PTS/0        192.168.108.1    WED DEC 16 20:35 - 05:12  (08:37)    
    例二

    [root@localhost ~]# cat /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
    syncx50sync/sbin/bin/sync
    





  • 相关阅读:
    TF利用分布式队列控制线程
    非随机的抽样
    代码杂谈-split函数
    beta函数与置信度估计
    tensorflow模型
    SQL的技巧
    tensorflow输入数据处理
    flink学习
    Python
    通过淘宝IP地址库获取IP位置
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293730.html
Copyright © 2020-2023  润新知