• 每天学点Linux-选取命令CUT和GREP


      选取命令就是将一段数据经过分析后,取出我们所想要的。或者是经由分析关键词,取得我们所想要的那一行!一般来说,选取命令通常是针对一行一行的数据来进行分析的, 并不是整篇信息分析。
    cut
      cut命令可以将一段信息的某一段选取出来,信息处理一行为单位。CUT命令使用格式如下:

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

      范例一:将 PATH 变量取出,我要找出第五个路径。

    [root@www ~]# echo $PATH | cut -d ':' -f 5
    # 如同上面的数字显示,我们是以『 : 』作为分隔,因此会出现 /usr/local/bin
    # 那么如果想要列出第 3 与第 5 呢?,就是这样:
    [root@www ~]# echo $PATH | cut -d ':' -f 3,5
    

       范例二:将 export 输出的信息,取得第 12 字符以后的所有字符串

    [root@www ~]# export
    declare -x HISTSIZE="1000"
    declare -x INPUTRC="/etc/inputrc"
    declare -x KDEDIR="/usr"
    declare -x LANG="zh_TW.big5"
    .....(其他省略).....
    # 注意看,每个数据都是排列整齐的输出!如果我们不想要『 declare -x 』时,
    # 就得这么做:
    
    [root@www ~]# export | cut -c 12-
    HISTSIZE="1000"
    INPUTRC="/etc/inputrc"
    KDEDIR="/usr"
    LANG="zh_TW.big5"
    

       CUT -d命令适合操作具有固定分割符的文本,用 -c 可以处理比较具有格式的输出数据,还可以指定某个范围的值,例如第 12-20 的字符,就是 cut -c 12-20。cut 主要的用途在于将『同一行里面的数据进行分解!』最常使用在分析一些数据或文字数据的时候! 这是因为有时候我们会以某些字符当作分割的参数,然后来将数据加以切割,以取得我们所需要的数据。 鸟哥也很常使用这个功能呢!尤其是在分析 log 文件的时候!不过,cut 在处理多空格相连的数据时,可能会比较吃力一点。

    grep

       cut是将一行信息当中,取出某部分我们想要的,而grep则是分析一行信息, 若当中有我们所需要的信息,就将该行拿出来。其使用方法如下:

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

      具体的操作实例如下:

    范例一:将 last 当中,有出现 root 的那一行就取出来;
    [root@www ~]# last | grep 'root'
    
    范例二:与范例一相反,只要没有 root 的就取出!
    [root@www ~]# last | grep -v 'root'
    
    范例三:在 last 的输出信息中,只要有 root 就取出,并且仅取第一栏
    [root@www ~]# last | grep 'root' |cut -d ' ' -f1
    # 在取出 root 之后,利用上个命令 cut 的处理,就能够仅取得第一栏啰!
    
    范例四:取出 /etc/man.config 内含 MANPATH 的那几行
    [root@www ~]# grep --color=auto 'MANPATH' /etc/man.config
    ....(前面省略)....
    MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man
    MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man
    MANPATH_MAP     /usr/bin/mh             /usr/share/man

    排序命令: 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) 来进行排序的意思
    

       范例一:个人账号都记录在 /etc/passwd 下,请将账号进行排序。

    [root@www ~]# cat /etc/passwd | sort
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    

      范例二:/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何?

    [root@www ~]# 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
    bin:x:1:1:bin:/bin:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    

       看到特殊字体的输出部分了吧?怎么会这样排列啊?如果是以文字型态来排序的话,原本就会是这样,想要使用数字排序,使用-n来以数字来排序。

    # cat /etc/passwd | sort -t ':' -k 3 -n
    

    uniq
      uniq命令可以用来去除重复的数据,仅仅保留一行,其使用方法如下:

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

       范例一:使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位;

    [root@www ~]# last | cut -d ' ' -f1 | sort | uniq
    

      范例二:承上题,如果我还想要知道每个人的登陆总次数呢?

    [root@www ~]# last | cut -d ' ' -f1 | sort | uniq -c
          1
         12 reboot
         41 root
          1 wtmp
    

      UNIQ这个命令用来将重复的行删除掉只显示一个,举个例子来说, 你要知道这个月份登陆你主机的用户有谁,而不在乎他的登陆次数,那么就使用上面的范例, (1)先将所有的数据列出;(2)再将人名独立出来;(3)经过排序;(4)只显示一个! 由于这个命令是在将重复的东西减少,所以当然需要『配合排序过的文件』来处理啰!
    wc
      如果想要知道文件里面有多少字?多少行?多少字符的话可以利用 wc 这个命令来达成,WC可以帮我们计算输出的信息的整体数据。其使用方法如下:

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

       范例一:那个 /etc/man.config 里面到底有多少相关字、行、字符数?

    [root@www ~]# cat /etc/man.config | wc
        141     722    4617
    

       输出的三个数字中,分别代表: 行、字数、字符数

  • 相关阅读:
    OPENWRT 支持git
    LUCI MVC框架
    luci范例
    Hive | Hive可以避免进行MapReduce
    ORACLE日常-oracle中给date型字段insert into值
    ORACLE日常-ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
    ORACLE日常-oracle字符串操作:拼接、替换、截取、查找
    HDFS中的shell操作
    java日常-map转成json
    java学习-reflection反射机制
  • 原文地址:https://www.cnblogs.com/wxgblogs/p/6876189.html
Copyright © 2020-2023  润新知