推广 热搜: 使用  page  音视频  选择  搜索引擎  百度  企业  可以  个数  父亲 

grep对文件内容搜索(附重要拓展-正则表达式)

   日期:2024-12-26     作者:jgkvw    caijiyuan   评论:0    移动:http://ww.kub2b.com/mobile/news/12625.html
核心提示:    文件搜索是搜索查找符合条件的某文件的目录,若要编辑文件或对文件的某配置进行修改,就需要对文件内容进行搜

    文件搜索是搜索查找符合条件的某文件的目录,若要编辑文件或对文件的某配置进行修改,就需要对文件内容进行搜索。

     命令是 Linux 及类 Unix 操作系统中的一个强大的文本搜索工具,用于搜索一个或多个文件中匹配给定模式的行。 代表“Global Regular expression Print”,意味着它使用正则表达式作为搜索模式,并且能够全局地在文件中查找匹配的文本。

拓展:正则表达式

正则表达式(Regular expression,通常缩写为 regex、regexp 或 RE)是一种用于文本模式匹配的强大工具。它使用特定的字符序列来描述、匹配和操作字符串,可以用于搜索、替换、提取或验证文本数据中符合特定模式的字符串。普通字符表示它们自身,而特殊字符则具有特定的含义,用来表示字符类、数量限定符、位置或序列查找等功能。 

正则表达式的核心在于其元字符(metacharacter,这些字符具有特殊的含义,能够代表更广泛的字符集或模式。以下是一些常见的元字符

  •  `.`:匹配任何单个字符(除了换行符)。
  • `^`:表示行的开始。
  • `$`:表示行的结束。
  • `*`:匹配前一个字符零次或多次。
  • `+`:匹配前一个字符一次或多次。
  • `?`:匹配前一个字符零次或一次。
  • `{m,n}`:匹配前一个字符至少 m 次,至多 n 次。
  • `[ ]`:字符集,匹配括号内的任何一个字符。
  • `|`:表示“或”,匹配左边或右边的表达式。
  • `()`:用于分组,改变优先级或捕获匹配的部分。

正则表达式还支持更多高级特性,如非捕获组、前瞻断言、后瞻断言等,这使得它能够处理更为复杂的匹配逻辑。

正则表达式在各种编程语言和工具中都有应用,如 Perl、Python、Javascript、Java、.NET、Unix shell 工具(如 sed 和 grep)等。它们被广泛用于数据清洗、文本解析、表单验证、日志分析等各种场景中。

例如,下面是一个简单的正则表达式示例,用于匹配邮箱地址

 

在这个表达式中

1. [a-zA-Z0-9._%+-]+

  • 这个部分匹配用户名。方括号 `[ ]` 定义了一个字符集,其中包含的字符都可以匹配。
  • `a-z` 和 `A-Z` 匹配任何小写字母或大写字母。
  • `0-9` 匹配任何数字。
  • `._%+-` 匹配下划线、点号、百分号、加号和减号。
  • `+` 在这里表示前面的字符集可以重复一次或多次。

2. @

  •    直接匹配 @ 符号,这是电子邮件地址中用户名和域名之间的分隔符。

3. [a-zA-Z0-9.-]+

  •    同样使用了字符集来匹配域名部分,与用户名部分相似,但是不包括 `%+-`,因为这些字符在域名中通常不会出现。
  • 再次`+` 表示这个字符集中的任意字符可以重复一次或多次。

4. .

  •    点号`.`)在正则表达式中有特殊含义,所以要匹配实际的点号需要使用反斜杠``)来转义它。

5. [a-zA-Z]{2,}

  •      最后一部分用于匹配顶级域名,如 ".com"、".org" 等。
  • [a-zA-Z]表示任何字母。
  • {2,} 表示这部分至少有2个字母,但实际上没有上限,尽管大多数顶级域名不会超过3或4个字母。

将这些部分组合起来,整个正则表达式可以匹配大多数常见的电子邮件地址格式,例如
·`joha.den@example.com`
·`info@company.co.uk`

——————————————————————————————————————————

grep的基本语法

 
  •  是你想要搜索的文本或正则表达式。
  •  是你要在其中搜索的文件名。如果没有指定文件, 会从标准输入中读取数据。

常用选项

  • :忽略大小写。
  • :反向搜索,即显示不匹配的行。
  • :只显示匹配的行数,而不是显示行的内容。
  • :显示匹配的行号。
  •  或 :递归搜索,即搜索指定目录下的所有文件。

注意事项

  • 使用正则表达式时,某些特殊字符需要被转义,例如点号)、星号)等。
  • 如果  包含空格,需要用引号包裹起来。
  •  支持多种模式,包括固定字符串、正则表达式等。

 应用

1.抓取已知文档的关键字

如上图,grep对某文件的关键字进行抓取,输出的是带有该关键字的行内容,所有包含该关键字的行都会被抓取出来。

2.单纯的知道行的内容不便于我们修改,如果我们想知道该元素在哪行该怎么办

如上,即加入-n 即第137行。

验证(用前面学过的cat可以验证一下该元素在哪一行

即cat -n H.txt

3.除此之外,还有一个选项是反向搜索-v,即不包括后面关键字的行。

这种搜索有什么用呢

    其中etc路径下存储配置文件,前面加的#代表注释,解释说明的作用,初期对文件不了解时可以借助注释简要了解,但是后期在对服务器运维的过程中,注释过多可能会导致占用内存过多,会影响我们修改文件,所以后期会去掉注释,这时我们就可以利用grep -v '#' /etc/services

    其中注释分为以#开头的注释和中间有#的注释两部分,如下图。

     上个命令会把所有带#的行都抓取出来,若只想把以#开头的注释提取出来,需要在‘#’前加一个^

    与之对应,$符号表示以某关键字结尾,其中该关键字要放在$前面,比如下图以s结尾

     上文我们想去掉注释,但是上面的方法把#不在句首的行也去掉了,也就是说,有一部分的有用信息被去掉了。所以要去掉的是以#开头的行

4. 之前说过,Linux系统是严格区分大小写的,如果不想区分大小写,需要加入选项-i,如

本文地址:http://ww.kub2b.com/news/12625.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号