• 『忘了再学』Shell基础 — 8、管道符介绍


    我们之前已经有文章说过管道符了,今天这里再简单总结一下用法。

    1、行提取命令grep

    grep命令的作用,是在指定的文件中,搜索符合条件的字符串。

    命令格式:

    shell
    [root@localhost ~ ] # grep [选项] ”搜索内容” 文件名

    选项:

    • -A 数字:列出符合条件的行,并列出后续的n行。
    • -B 数字:列出符合条件的行,并列出前面的n行。
    • -c:统计找到的符合条件的字符串的次数。
    • -i:忽略大小写。
    • -n:输出行号。
    • -v:反向查找。
    • --color=auto:搜索出的关键字用颜色显示。

    示例:

    • 例子1:查找用户信息文件/etc/passwd中,有多少可以登录的用户。
      shell
      [root@localhost ~]# grep "/bin/bash" /etc/passwd
    • 例子2:查找用户信息文件/etc/passwd中,包含有root的行,并列出后续的3行。
      shell
      [root@localhost ~]# grep -A 3 "root" /etc/passwd
    • 例子3:查找用户信息文件/etc/passwd中,可以登录的用户,并显示行号。
      shell
      [root@localhost ~]# grep -n "/bin/bash" /etc/passwd
    • 例子4:查找用户信息文件/etc/passwd中,不含有/bin/bash的行,其实就是列出所有的伪用户。
      shell
      [root@localhost ~]# grep -v "/bin/bash" /etc/passwd

    2、find和grep的区别

    find命令是在系统当中搜索符合条件的文件名,搜索时文件名是完全匹配。如果需要模糊查询,使用通配符进行匹配。

    shell
    #建立文件abc
    [root@localhost ~ ] # touch abc
    
    #建立文件abcd
    [root@localhost ~ ] # touch abcd
    
    #查找abc文件
    [root@localhost ~ ] # find . -name ”abc"
    ./abc

    搜索文件名是abc的文件,只会找到abc文件,而不会找到文件abcd。虽然abed文件名中包含abc,但是find命令是完全匹配,只能和要搜索的数据完全一样,才能找到。

    注意:

    find命令是可以通过-regex选项识别正则表达式规则的,也就是说find命令可以按照正则表达式规则匹配,而正则表达式是模糊匹配。但是对于初学者而言,find命令和grep命令本身就不好理解,所以我们这里只按照通配符规则来进行find查询。

    grep命令是在文件当中搜索符合条件的字符串,如果需要模糊查询,使用正则表达式进行匹配,搜索时字符串是包含匹配。

    shell
    #test文件中写入abc数据
    [root@localhost ~ ] # echo abc > test
    
    #test文件中再追加abcd数据
    [root@localhost ~]#echo abcd >> test
    
    #test文件中查找abc字符串
    [root@localhost ~]#grep”abc" test
    abc
    abcd

    grep命令查找时,只要数据行中包含有abc,就会都列出,所以abcabed都可以查询到。

    3、管道符

    管道符之前总结过,请看之前的文章:https://www.cnblogs.com/liuyuelinfighting/p/15530010.html

    我们下面简单的做几个练习:

    • 练习1:
      查询本地所有网络连接,提取包含ESTABLISHED(已建立连接)的行,就可以知道我们的服务器上有多少已经成功连接的网络连接。
      shell
      [root@localhost ~]# netstat -an | grep "ESTABLISHED"
    • 练习2:
      如果想知道具体的网络连接数量,就可以再使用wc命令统计行数。
      shell
      [root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l

    4、通配符

    通配符是用来匹配文件名的,文件名在查询的时候是完全匹配的,必须一模一样才会查询出,否则就要加通配符,进行模糊查询。

    image

    练习:

    shell
    # 创建4个测试文件
    [root@localhost tmp]# touch abc
    [root@localhost tmp]# touch abcd
    [root@localhost tmp]# touch 012
    [root@localhost tmp]# touch 0abc
    
    # “*”代表查找所有的文件
    [root@localhost tmp]# ls *
    012 0abc abc abcd
    
    # “?"匹配任意一个字符,所以会匹配0abc
    #但是不能匹配abc,因为“?”"不能匹配空
    [root@localhost tmp]# ls ?abc
    0abc
    
    # 匹配任何以数字开头的文件
    [root@localhost tmp]# ls [0-9]*
    012 0abc
    
    # 匹配不已数字开头的文件
    [root@localhost tmp]# ls [^0-9]*
    abc abed
    

    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16086534.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    python pyqt5 计算下载文件的进度百分比
    数据结构与算法——算法时间复杂度
    彻底搞懂Swagger&Knife4j使用方法
    商用车自动驾驶进入「拐点」时刻
    VISUAL STUDIO调试器指南---断点和跟踪点
    Python爬虫_Scrapy(一)
    CRM销售管理系统是如何进行数据分析的
    yjs demo: 多人在线协作画板
    RTOS必备操作---临界区保护
    详谈滑动窗口算法与KMP算法区别以及二者在什么场景下使用
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16086534.html