首页 > 系统相关 >Linux三剑客介绍——grep

Linux三剑客介绍——grep

时间:2023-11-19 22:23:58浏览次数:27  
标签:选项 匹配 text Linux grep txt match 三剑客

在Linux系统中,有三个非常常用的文本处理命令:grep,awk,sed。使用这三个命令可以实现非常“炫酷”的文本操作。这篇博文就带大家一起来认识这三个命令中的grep命令。

1. grep

        grep命令用来对Linux中的文本进行匹配。

            $ echo -e "this is a word\nnext line" | grep word
            this is a word

      也可以使用它在文件中进行匹配。

            $ grep pattern filename
            this is the line containing pattern

       文件可以指定多个。

      $ grep "match_text" file1 file2 file3 ...

      匹配模式也可以指定多个,每个格式之间是or的关系

      $ grep -e "match_text1" f -e "match_text2" file

      grep命令支持使用正则表达式。以上的命令使用的都是基础的正则表达式,-E选项使grep可以使用扩展的正则表达式,也可以使用egrep命令来替代。

      $ grep -E "[a-z]+" filename

     使用选项-o可以只输出匹配到的文本。

      $ echo this is a line. | egrep -o "[a-z]+\."
      line

     选项-v可以起到反转的效果,打印出不匹配match_pattern的所有行。

      $ grep -v match_pattern file

      选项-c能够统计出匹配模式的文本行数。

      $ grep -c "text" filename
      10

      选项-n可以打印出匹配字符串所在行的行号。

      $ cat sample1.txt
      gnu is not unix
      linux is fun
      bash is art
      $ cat sample2.txt
      planetlinux
      $ grep linux -n sample1.txt
      2:linux is fun

     如果涉及多个文件,该选项也会随输出结果打印出文件名。

     $ grep linux -n sample1.txt sample2.txt
     sample1.txt:2:linux is fun
     sample2.txt:2:planetlinux

      使用-R或-r选项可以使grep实现递归搜索。

        $ cd src_dir
        $ grep "test_function()" . -R -n
        ./miscutils/test.c:16:test_function();

     使用-q选项可以使grep实现静默输出,在静默模式中,grep命令不会输出任何内容。它仅是运行命令,然后根据命令执行成功与否返回退出状态。0表示匹配成功,非0表示匹配失败,下面这个脚本利用grep的静默模式来测试文件中是否有匹配文本。

        #!/bin/bash
        # 文件名: silent_grep.sh
        # 用途: 测试文件是否包含特定的文本内容
        if [$# -ne 2]; then
          echo "Usage: $0 match_text filename"
          exit 1
        fi
        match_text=$1
        filename=$2
        grep -q "$match_text" $filename
        if [$? -eq 0]; then
          echo "The text exists in the file"
        else
          echo "Text does not exist in the file"
        fi

    选项-l可以列出匹配模式所在的文件。

        $ grep -l linux sample1.txt sample2.txt
        sample1.txt
        sample2.txt

   与之相反的是,-L选项会返回一个不匹配的文件列表。

    在grep中,可以指定在指定的文件中搜索,要做到这一点,需要为命令添加--include选项。

        $ grep "main()" . -r   --include *.{c,cpp}

    使用选项--exclude在搜索过程中排除指定的文件。

        $ grep "main()" . -r --exclude "README"

    --exclude-dir可以排除目录

        $ grep main . -r -exclude-dir CVS

    使用-w选项可以实现匹配整个单词,而不是单词的某一部分。

      $ grep -w "text" filename

    通过参数控制,可以打印匹配的单词前后具体的行。

    -A: 指定输出匹配结果及之后的额外行数。

        $ seq 10 | grep 5 -A 3
        5 6 7 8

   -B:指定输出匹配结果及之前的额外行数。

        $ seq 10 | grep 5-B 3
        2 3 4 5

   -C:指定输出匹配结果之前及之后的额外行数。

        $ seq 10 | grep 5-C 3
        2 3 4 5 6 7 8

 

标签:选项,匹配,text,Linux,grep,txt,match,三剑客
From: https://www.cnblogs.com/xyhj/p/17842818.html

相关文章

  • 深入了解Linux下的find命令
    在Linux系统中,find命令是一个强大的工具,用于在文件系统中查找文件和目录。它支持基于多种条件的搜索,并且可以执行各种操作。本文将深入探讨find命令的基本用法、常见选项以及一些高级用法,以帮助你更好地利用这个强大的工具。1.基本用法1.1.查找文件最基本的用法是按照文件名来......
  • Linux 系统systemd(pid=1)占用80端口导致web程序无法启动
    注意务必组好快照备份后再操作。 做好备份后将/usr/lib/systemd/system内http相关的配置文件重命名后重启主机恢复正常。......
  • Linux部署Python环境
    本文使用的Linux发行版本为AlmaLinux9.264位(CentOS停止更新后的完美替代发行版本)。本文安装的Python版本为3.12.0,其他版本方法类似。准备工作更新系统。dnf-yupdate安装Python前,需确认当前系统是否已安装Python以及对应版本。不建议卸载原有Python版本,可能被应用......
  • Linux安装MySQL
    本文使用的Linux发行版本为AlmaLinux9.264位(CentOS停止更新后的完美替代发行版本)。本文安装的MySQL版本为8.1.0,其他版本方法类似。MySQL源码编译时间太长了,需要3到4小时,使用官网编译好的rpm更简单快捷。操作步骤更新系统。dnf-yupdate查看是否已经有安装了的mysql......
  • 【nest入门】[bug记录]在jupyter notebook中使用conda环境(linux)
    NEST在安装引导https://nest-simulator.readthedocs.io/en/stable/installation/user.html#user-install中提供了conda的方式,如下图所示:如上图中步骤第1步,进行了condacreate--namenest36-cconda-forgenest-simulator后,在jupyter中想要切换到所创建的名为ENVNAME的con......
  • Linux驱动开发 驱动程序的具体编写及出口入口函数解析,printk打印内核信息
    (文章目录)前言本文将带大家学习驱动程序的具体编写及出口入口函数解析。一、出口函数入口函数解析每一个驱动程序都是含有出口函数和入口函数的,装载驱动的时候先调用入口函数,卸载驱动的时候则调用出口函数。入口出口函数的形式如下:static__initinthello_dev_init(void)......
  • linux中cmake的用法
    cmake的基本用法一、message()函数message:为用户显示一条消息message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]"messagetodisplay"...)#(无)=重要消息;#STATUS=非重要消息;#WARNING=CMake警告,会继续执行;#AUTHOR_WARNING=CMake警......
  • Linux第七次周总结
    第六章I/O重定向与管道6.1I/O重定向打开一个终端0,输入date命令,会显示当前时间。如果在date命令后加“>”,并指向date.txt文件,那么就会写入date.txt文件。在执行passwd命令改密码时,系统会产生一个进程。date命令在默认情况下将输出结果显示在终端,此时文件描述符为1。现在改变......
  • linux命令学习
    Linux命令的学习导航目录Linux命令的学习导航使用VMware备份操作系统快照克隆Linux系统的文件文件与文件夹Linux系统的文件目录结构Linux的基本指令指令与选项基础指令ls指令pwd指令cd命令mkdir指令touch指令cp指令mv指令rm指令vim命令输出重定向cat指令进阶指令df指令free指令h......
  • Linux下荣耀MagicBook的触控板被错误识别为鼠标的临时解决方案
    TL;DR安装软件包hid-tools,然后运行命令:sudohid-featureset-f300003$(sudohid-featurelist-devices|grepBLTP7853|awk-F:'{print$1}')问题现象荣耀MagicBook笔记本安装了汇顶的触控板,此触控板在Linux下被识别为鼠标,导致无法使用触控板手势等功能。该触控板......