• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Shell过滤器的具体使用

    我们己经知道,将几个命令通过管道符组合在一起就形成一个管道。通常,通过这种方式使用的命令就被称为过滤器。过滤器会获取输入,通过某种方式修改其内容,然后将其输出。

    简单地说,过滤器可以概括为以下两点:

    常用的被作为过滤器使用的命令如下所示:

    命令 说明
    awk 用于文本处理的解释性程序设计语言,通常被作为数据提取和报告的工具。
    cut 用于将每个输入文件(如果没有指定文件则为标准输入)的每行的指定部分输出到标准输出。
    grep 用于搜索一个或多个文件中匹配指定模式的行。
    tar 用于归档文件的应用程序。
    head 用于读取文件的开头部分(默认是 10 行)。如果没有指定文件,则从标准输入读取。
    paste 用于合并文件的行。
    sed 用于过滤和转换文本的流编辑器。
    sort 用于对文本文件的行进行排序。
    split 用于将文件分割成块。
    strings 用于打印文件中可打印的字符串。
    tac 与 cat 命令的功能相反,用于倒序地显示文件或连接文件。
    tail 用于显示文件的结尾部分。
    tee 用于从标准输入读取内容并写入到标准输出和文件。
    tr 用于转换或删除字符。
    uniq 用于报告或忽略重复的行。
    wc 用于打印文件中的总行数、单词数或字节数。

    接下来,我们通过几个实例来演示一下过滤器的使用。

    在管道中使用 awk 命令

    关于 awk 命令的具体用法,请大家自行学习,本节我们我们仅通过几个简单的实例来了解一下 awk 命令在管道中的使用。

    实例1

    查看系统中的所有的账号名称,并按名称的字母顺序排序。

    [jb51.net]$ awk -F: '{print $1}' /etc/passwd | sort
    adm
    apache
    avahi
    avahi-autoipd
    bin
    daemon
    dbus
    ftp
    games
    ...
    

    在上例中,使用冒号:作为列分隔符,将文件 /etc/passwd 的内容分为了多列,并打印了第一列的信息(即用户名),然后将输出通过管道发送到了 sort 命令。

    实例2

    列出当前账号最常使用的 10 个命令。

    [jb51.net]$ history | awk '{print $2}' | sort | uniq -c | sort -rn | head
    140 echo
     75 man
     71 cat
     63 su
     53 ls
     50 vi
     47 cd
     40 date
     26 let
     25 paste
    

    在上例中,history 命令将输出通过管道发送到 awk 命令,awk 命令默认使用空格作为列分隔符,将 history 的输出分为了两列,并把第二列内容作为输出通过管道发送到了 sort 命令,使用 sort 命令进行排序后,再将输出通过管道发送到了 uniq 命令,使用 uniq 命令 统计了历史命令重复出现的次数,再用 sort 命令将 uniq 命令的输出按照重复次数从高到低排序,最后使用 head 命令默认列出前 10 个的信息。

    实例3

    显示当前系统的总内存大小,单位为 KB。

    [jb51.net]$ free | grep Mem | awk '{print $2}'
    2029860
    

    在管道中使用 cut 命令

    cut 命令被用于文本处理。你可以使用这个命令来提取文件中指定列的内容。

    实例1

    查看系统中登录 Shell 是“/bin/bash”的用户名和对应的用户主目录的信息:

    [jb51.net]$ grep "bin/bash" /etc/passwd | cut -d: -f1,6
    root:/root
    mozhiyan:/home/mozhiyan
    

    如果你对 Linux 系统有所了解,你会知道,/ctc/passwd 文件被用来存放用户账号的信息,此文件中的每一行会记录一个账号的信息,每个字段之间用冒号分隔,第一个字段即是账号的账户名,而第六个字段就是账号的主目录的路径。

    实例2

    查看当前机器的CPU类型。

    [jb51.net]$ cat /proc/cpuinfo | grep name | cut -d: -f2 | uniq
    Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
    

    上例中,执行命令cat /proc/cpuinfo | grep name得到的内容如下所示:

    [jb51.net]$ cat /proc/cpuinfo | grep name
    model name  : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
    model name  : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
    model name  : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
    model name  : Intel(R) Core(TM) i5-2520M CPU 0 2.50GHz
    

    然后,我们使用 cut 命令将上述输出内容以冒号作为分隔符,将内容分为了两列, 并显示第二列的内容,最后使用 uniq 命令去掉了重复的行。

    实例3

    查看当前目录下的子目录数。

    [jb51.net]$ ls -l | cut -c 1 | grep d | wc -l
    5
    

    上述管道命令主要做了如下操作:

    在管道中使用grep命令

    grep 命令是在管道中比较常用的一个命令。

    实例1

    查看系统日志文件中的错误信息。

    [jb51.net]$ grep -i "error:" /var/log/messages | less
    
    

    实例2

    查看系统中 HTTP 服务的进程信息。

    [jb51.net]$ ps auxwww | grep httpd
    apache 18968 0.0 0.0 26472 10404 ?  S  Dec15  0:01 /usr/sbin/httpd
    apache 18969 0.0 0.0 25528 8308 ?  S  Dec15  0:01 /usr/sbin/httpd
    apache 18970 0.0 0.0 26596 10524 ?  S  Dec15  0:01 /usr/sbin/httpd
    

    实例3

    查找我们的程序列表中所有命令名中包含关键字 zip 的命令。

    [jb51.net]$ ls /bin /usr/bin | sort | uniq | grep zip
    bunzip2
    bzip2
    bzip2recover
    gunzip
    gzip
    

    实例4
    查看系统安装的 kernel 版本及相关的 kernel 软件包。

    [jb51.net]$ rpm -qa | grep kernel
    kernel-2.6.18-92.e15
    kernel-debuginfo-2.6.18-92.e15
    kernel-debuginfo-common-2.6.18-92.e15
    kernel-devel-2.6.18-92.e15

    实例5

    查找 /etc 目录下所有包含 IP 地址的文件。

    [jb51.net]$ find /etc -type f -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \;
    

    在管道中使用 tar 命令

    tar 命令是 Linux 系统中最常用的打包文件的程序。

    实例1

    你可以使用 tar 命令复制一个目录的整体结构。

    [jb51.net]$ tar cf - /home/mozhiyan | ( cd /backup/; tar xf - )
    

    实例2
    跨网络地复制一个目录的整体结构。

    [jb51.net]$ tar cf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xf - )"
    
    

    实例3
    跨网络地压缩复制一个目录的整体结构。

    [jb51.net]$ tar czf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xzf - )"
    

    实例4
    检査 tar 归档文件的大小,单位为字节。

    [jb51.net]$ cd /; tar cf - etc | wc -c
    215040

    实例5
    检查 tar 归档文件压缩为 tar.gz 归裆文件后所占的大小。

    [jb51.net]$ tar czf - etc.tar | wc -c
    58006

    实例6
    检查 tar 归档文件压缩为 tar.bz2 归裆文件后所占的大小。

    [jb51.net]$ tar cjf - etc.tar | wc -c
    50708

    在管道中使用 head 命令

    有时,你不需要一个命令的全部输出,可能只需要命令的前几行输出。这时,就可以使用 head 命令,它只打印命令的前几行输出。默认的输出行数为 10 行。

    实例1

    显示 ls 命令的前 10 行输出。

    [jb51.net]$ ls /usr/bin | head
    addftinfo
    afmtodit
    apropos
    arch
    ash
    awk
    base64
    basename
    bash
    bashbug
    

    实例2
    显示 ls 命令的前 5 行内容。

    [jb51.net]$ ls / | head -n 5
    bin
    cygdrive
    Cygwin.bat
    Cygwin.ico
    Cygwin-Terminal.ico
    

    在管道中使用 uniq 命令

    uniq 命令用于报告或删除重复的行。我们将使用一个测试文件进行管道中使用 uniq 命令的实例讲解,其内容如下所示:

    [jb51.net]$ cat testfile
    This line occurs only once.
    This line occurs twice.
    This line occurs twice.
    This line occurs three times.
    This line occurs three times.
    This line occurs three times.
    

    实例1
    去掉输出中重复的行。

    [jb51.net]$ sort testfile | uniq
    This line occurs only once.
    This line occurs three times.
    This line occurs twice.
    

    实例2
    显示输出中各重复的行出现的次数,并按次数多少倒序显示。

    [jb51.net]$ sort testfile | uniq -c | sort -nr
    3 This line occurs three times.
    2 This line occurs twice.
    1 This line occurs only once.
    

    在管道中使用 wc 命令

    wc 命令用于统计包含在文本流中的字符数、单同数和行数。

    实例1
    统计当前登录到系统的用户数。

    [jb51.net]$ who | wc -l
    

    实例2
    统计当前的 Linux 系统中的进程数。

    [jb51.net]$ ps -ef | wc -l

    到此这篇关于Shell过滤器的具体使用的文章就介绍到这了,更多相关Shell过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Windows Powershell Where-Object 条件过滤
    • Windows Powershell过滤管道结果
    • PowerShell中按文件后缀过滤的实现代码
    上一篇:Shell特殊变量(Shell $#、$*、$@、$?、$$)的使用
    下一篇:Shell字符串截取的实现方法(非常详细)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Shell过滤器的具体使用 Shell,过滤器,的,具体,使用,