美文网首页
通配符及管道命令

通配符及管道命令

作者: Hye_Lau | 来源:发表于2018-05-29 19:37 被阅读0次

    一.常用通配符

    globbing:文件名通配(整体文件名匹配,而非部分)
    匹配模式:元字符

    *:匹配任意长度的任意字符

    常用格式

    pa*,*pa*,*pa,*p*a*
    

    实例

    // 找出/etc/下面以cron开头的文件名
    [root@localhost ~]# ll -d /etc/cron*
    drwxr-xr-x. 2 root root 4096 7月   2 2017 /etc/cron.d
    drwxr-xr-x. 2 root root 4096 7月   2 2017 /etc/cron.daily
    -rw-r--r--. 1 root root    0 7月  19 2011 /etc/cron.deny
    drwxr-xr-x. 2 root root 4096 7月   2 2017 /etc/cron.hourly
    drwxr-xr-x. 2 root root 4096 7月   2 2017 /etc/cron.monthly
    -rw-r--r--. 1 root root  457 9月  27 2011 /etc/crontab
    drwxr-xr-x. 2 root root 4096 9月  27 2011 /etc/cron.weekly
    

    ?:匹配任意单个字符

    常用格式

    pa?,??pa,p?a?
    

    实例

    // 找出/etc/下面文件名刚好是五个字母的文件名
    [root@localhost ~]# ll -d /etc/?????    <==五个?对应五个字母
    drwxr-x---. 2 root root 4096 7月   2 2017 /etc/audit
    drwxr-xr-x. 4 root root 4096 7月   2 2017 /etc/avahi
    drwxr-xr-x. 2 root root 4096 5月  11 01:08 /etc/blkid
    drwxr-xr-x. 4 root root 4096 7月   2 2017 /etc/fonts
    -rw-r--r--. 1 root root  899 7月   2 2017 /etc/fstab
    ......
    -rw-r--r--. 1 root root 1962 2月  17 2012 /etc/vimrc
    

    [ ]:匹配指定范围内的任意字符

    几种特殊格式:

    • [a-z],[A-Z],[0-9],[a-z0-9]
    • [[:upper:]]:所有大写字母
    • [[:lower:]]:所有小写字母
    • [[:alpha:]]:所有字母
    • [[:digit:]]:所有数字
    • [[:alnum:]]:所有字母和数字
    • [[:space:]]:所有空白字符
    • [[:punct:]]:所有小写字母

    实例

    // 找出/etc/下面文件名含有数字的文件名
    [root@localhost ~]# ll -d /etc/*[0-9]*
    drwxr-xr-x. 4 root root 4096 7月   2 2017 /etc/dbus-1
    -rw-r--r--. 1 root root 5139 4月  17 2012 /etc/DIR_COLORS.256color
    drwxr-xr-x. 3 root root 4096 7月   2 2017 /etc/gnome-vfs-2.0
    drwxr-xr-x. 3 root root 4096 7月   2 2017 /etc/gtk-2.0
    drwxr-xr-x. 2 root root 4096 7月   2 2017 /etc/iproute2
    -rw-r--r--. 1 root root  449 5月   2 2012 /etc/krb5.conf
    -rw-r--r--. 1 root root  801 9月   8 2009 /etc/mke2fs.conf
    drwxr-xr-x. 5 root root 4096 7月   2 2017 /etc/polkit-1
    

    [^]:匹配指定范围外的任意单个字符

    • [^[:upper:]]:匹配指定范围外的任意单个字符

    实例

    // 找出/etc/下面文件名开头非为大写字母的文件名
    [root@localhost ~]# ll -d /etc/[^A-Z]*
    drwxr-xr-x. 3 root root  4096 7月   2 2017 /etc/abrt
    drwxr-xr-x. 4 root root  4096 7月   2 2017 /etc/acpi
    -rw-r--r--. 1 root root    44 4月  23 22:53 /etc/adjtime
    -rw-r--r--. 1 root root  1512 1月  12 2010 /etc/aliases
    -rw-r--r--. 1 root root 12288 7月   2 2017 /etc/aliases.db
    drwxr-xr-x. 2 root root  4096 7月   2 2017 /etc/alsa
    drwxr-xr-x. 2 root root  4096 7月   2 2017 /etc/alternatives
    
    • 练习1:显示 /var目录下所有以l开头,以一个小写字母结尾,且中间出现一位数字的文件或目录;
    [root@localhost ~]# ls -d /etc/l?[[:lower:]]
    /etc/lvm
    
    • 练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
    ls -d /etc/[0-9]*[^0-9]
    
    • 练习3:显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录;
    ls -d /etc/[^a-z][a-z]*
    
    • 练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/test目录;
    [root@localhost ~]# cp -r /etc/m*[^0-9] /tmp/test
    [root@localhost ~]# cd /tmp/test
    [root@localhost test]# ls
    magic    mail.rc    man.config  mime.types   modprobe.d  mtab
    mailcap  makedev.d  maven       mke2fs.conf  motd        my.cnf
    
    • 练习5:复制user/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下;
    cp -r /user/share/man/man*[0-9] /tmp/man/
    
    • 练习6:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;
    cp -r /etc/[mnrp]*.conf /tmp/conf.d/
    

    注意:4/5/6题需要自己先创建目录

    二.文本处理工具

    • cut:选取命令
    • wc:字符统计
    • sort:排序
    • uniq:排序

    1.cut命令

    命令格式

    cut OPTION...[FILE]...
    

    常用选项

    -d:后面跟分隔符,与-f一起使用;
    -f:指明需要取出的字段
        #:第#个字段
        #,#,#:离散的字段,如1,2,3
        #-#:连续的多个字段,如1-6
       混合使用:1-3,7,9,11-15
    

    实例

    [root@localhost ~]# echo $PATH
    /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    //以:作为分隔符,将上述字段分成了8个字段
    [root@localhost ~]# echo $PATH | cut -d ':' -f 3,5
    /usr/local/bin:/bin
    
    //用last在显示的登录者的信息中仅留下用户大名
    [root@localhost ~]# last
    mageia   pts/1        192.168.0.8      Wed May 23 05:02 - 05:02  (00:00)    
    root     pts/0        192.168.0.8      Thu May 17 23:23   still logged in   
    logstash pts/1        192.168.0.8      Wed May 16 00:12 - 16:56  (16:43)    
    ......
    wtmp begins Sun Jul  2 04:21:54 2017
    [root@localhost ~]# last | cut -d ' ' -f 1
    mageia
    root
    logstash
    ......
    wtmp
    

    2.wc命令

    常用格式

    cut OPTION...[FILE]...
    

    常用选项

    -l:仅列出行;
    -w:仅列出多少字(英文单字);
    -c:统计字符个数
    

    实例

    [root@localhost ~]# cat /etc/man.config | wc
        152     765    4940
    [root@localhost ~]# cat /etc/man.config | wc -l
    152
    [root@localhost ~]# cat /etc/man.config | wc -w
    765
    [root@localhost ~]# cat /etc/man.config | wc -c
    4940
    

    3.sort命令

    命令格式

    sort OPTION...[FILE]...
    

    常用选项

    -f:忽略大小写
    -r:逆序
    -t:字段分隔符,默认是用[Tab]键来分隔;
    -k #:以指定字段为标准排序;
    -n:使用“纯数字”进行排序
    -u:相同的数据中,进出线一行代表
    

    实例

    //以“第一个”数据来排序,以“文字”类型来排序
    [root@localhost ~]# cat /etc/passwd | sort
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    basher:x:502:502::/home/basher:/bin/bash
    bash:x:501:501::/home/bash:/bin/bash
    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
    distro:x:4017:2018::/home/distro:/bin/bash
    //以“:”为分隔符,以第三字段内容进行排序,依旧为“文字”排序
    [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
    mageia:x:1100:1100::/home/linux:/bin/bash
    operator:x:11:0:operator:/root:/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
    
    //以数字排序
    [root@localhost ~]# cat /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
    
    

    4.uniq命令

    命令格式

    uniq OPTION...[INPUT[output]]
    

    常用选项

    -c:显示每行重复的次数
    -d:仅显示重复的行
    -u:仅显示不重复的行
    

    实例

    //使用last账号列出,仅取出账号列,进行排序后仅取出一位
    [root@localhost ~]# last | cut -d ' ' -f1 | sort | uniq
    
    logstash
    mageia
    reboot
    root
    wtmp
    
    //上例的基础上,统计出每个账户的登录次数
    [root@localhost ~]# last | cut -d ' ' -f1 | sort | uniq -c
          1 
          1 logstash
          1 mageia
         10 reboot
         22 root
          1 wtmp
    //reboot登录10次,root登录22次,其余为1次
    

    练习

    • 1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次:
    root@localhost ~]# who
    root     tty1         2018-05-12 23:23
    root     pts/0        2018-05-17 23:23 (192.168.0.8)
    [root@localhost ~]# who | cut -d ' ' -f 1
    root
    root
    [root@localhost ~]# who | cut -d ' ' -f 1 | sort -u
    root
    
    • 2.取出最后登录到当前系统的用户的相关信息
    [root@localhost ~]# last| head -1
    mageia   pts/1        192.168.0.8      Wed May 23 05:02 - 05:02  (00:00) 
    
    • 3.列出当前系统上被用户当作默认shell的最多的那个shell
    [root@localhost ~]# cat /etc/passwd | cut -d ':' -f7 | uniq -c
          1 /bin/bash
          4 /sbin/nologin
          1 /bin/sync
          1 /sbin/shutdown
          1 /sbin/halt
         21 /sbin/nologin
          3 /bin/bash
          1 /bin/sh
          6 /bin/bash
          1 /bin/tcsh
    [root@localhost ~]# cat /etc/passwd | cut -d ':' -f7 | uniq -c | sort -n | tail -1
         21 /sbin/nologin
    
    • 4.将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxuser.txt文件
    [root@localhost ~]# cat /etc/passwd |sort -t ':' -k3 -n | tail -n10 | tr 'a-z' 'A-Z' > /tmp/maxuser.txt
    [root@localhost ~]# cat /tmp/maxuser.txt 
    BASHER:X:502:502::/HOME/BASHER:/BIN/BASH
    MAGEIA:X:1100:1100::/HOME/LINUX:/BIN/BASH
    SLACKWARE:X:2002:2018::/HOME/SLACKWARE:/BIN/TCSH
    USER_U:X:4000:5002::/HOME/USER_U:/BIN/BASH
    TEST:X:4006:4006:UNIQE:/HOME/TEST:/BIN/SH
    HBASE:X:4011:4011::/HOME/HBASE:/BIN/BASH
    LOGSTASH:X:4015:4015::/HOME/LOGSTASH:/BIN/BASH
    USER_G:X:4016:5002::/HOME/USER_G:/BIN/BASH
    DISTRO:X:4017:2018::/HOME/DISTRO:/BIN/BASH
    NFSNOBODY:X:65534:65534:ANONYMOUS NFS USER:/VAR/LIB/NFS:/SBIN/NOLOGIN
    
    • 5.取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分
    [root@localhost ~]# ifconfig 
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:48:5F:02  
              inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe48:5f02/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1574963 errors:3 dropped:3 overruns:0 frame:0
              TX packets:76439 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:125478876 (119.6 MiB)  TX bytes:6134879 (5.8 MiB)
              Interrupt:19 Base address:0x2000 
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:194 errors:0 dropped:0 overruns:0 frame:0
              TX packets:194 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:16230 (15.8 KiB)  TX bytes:16230 (15.8 KiB)
    [root@localhost ~]# ifconfig | head -2 | tail -1 | cut -d ':' -f2
    192.168.0.10  Bcast
    [root@localhost ~]# ifconfig | head -2 | tail -1 | cut -d ':' -f2 |cut -d ' ' -f1
    192.168.0.10
    
    • 6.列出/etc目录下所有以.conf结尾的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
    [root@localhost ~]# find /etc -name "*.conf" | tr 'a-z' 'A-Z' > /tmp/etc.conf
    [root@localhost ~]# cat /tmp/etc.conf 
    /ETC/DRACUT.CONF
    /ETC/SELINUX/SEMANAGE.CONF
    /ETC/SELINUX/RESTORECOND_USER.CONF
    /ETC/SELINUX/TARGETED/SETRANS.CONF
    /ETC/SELINUX/RESTORECOND.CONF
    ......
    
    • 7.显示/var目录下一级子目录或文件的总个数。
    [root@localhost ~]# ls -d /var/* 
    /var/account  /var/cvs    /var/games  /var/lock  /var/nis       /var/run    /var/yp
    /var/cache    /var/db     /var/lib    /var/log   /var/opt       /var/spool
    /var/crash    /var/empty  /var/local  /var/mail  /var/preserve  /var/tmp
    [root@localhost ~]# ls -d /var/* | wc -l
    19
    
    • 8.取出/etc/group文件中第三个字段的数值最小的10个组的名字
    [root@localhost ~]# cat /etc/group | sort -t ':' -k3 -n | head -n10 
    root:x:0:
    bin:x:1:bin,daemon
    daemon:x:2:bin,daemon
    sys:x:3:bin,adm
    adm:x:4:adm,daemon
    tty:x:5:
    disk:x:6:
    lp:x:7:daemon
    mem:x:8:
    kmem:x:9:
    [root@localhost ~]# cat /etc/group | sort -t ':' -k3 -n | head -n10 | cut -d ':' -f1
    root
    bin
    daemon
    sys
    adm
    tty
    disk
    lp
    mem
    kmem
    
    • 9.将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
    [root@localhost ~]#  cat /etc/{fstab,issue} > /tmp/etc.test
    [root@localhost ~]# cat /tmp/etc.test
    
    #
    # /etc/fstab
    # Created by anaconda on Sun Jul  2 04:16:54 2017
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=e31be215-2c21-45f2-a43f-1a9c6bc383f2 /                       ext4    defaults        1 1
    UUID=e21d7c4d-25ec-4dd5-aa07-a30d93fa7c21 /boot                   ext4    defaults        1 2
    UUID=c0171f40-f6da-4511-adde-49d051567eb2 /home                   ext4    defaults        1 2
    UUID=07042df1-e750-4be6-9a53-ce80e0cd84a0 swap                    swap    defaults        0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    CentOS release 6.3 (Final)
    Kernel \r on an \m
    
    • 参考书籍《鸟哥的Linux私房菜--基础学习篇》

    相关文章

      网友评论

          本文标题:通配符及管道命令

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