Linux入门——文本处理三剑客之grep

在Linux的使用过程中,需要处理大量的文本文件,这很符合Linux的哲学思想——一切皆文件。也是因为如此linux内置了文本处理三剑客,他们分别是grep、sed、awk。而三剑客在使用的过程中又有不同的侧重,今天将主要介绍的是文本过滤工具grep。

1.    grep命令的使用

grep 选项 关键字 文本路径

grep root  /etc/passwd

grep

  --color=auto: 对匹配到的文本着色显示 (7里自动显示,6不显示)

  -i: 忽略字符大小写

  -n:显示匹配的行号

  -o: 仅显示匹配到的字符串

  -q: 静默模式,不输出任何信息

  -e:实现多个选项间的逻辑or关系

    grep –e ‘cat ’ -e ‘dog’ file

  -w:匹配整个单词

2.基本正则表达式

提到grep就不得不说正则表达式,正则表达式分为两类基本正则,扩展正则,以后要用的许多工具都支持正则表达式,如vim,sed,awk,包括Python也支持。正则表达式分为4类元字符:字符匹配、匹配次数、位置锚定、分组

字符匹配:

  . 匹配任意单个字符

  [] 匹配指定范围内的任意单个字符

  [^] 匹配指定范围外的任意单个字符

  [:alnum:] 字母和数字

  [:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z

  [:lower:] 小写字母[:upper:] 大写字母

  [:blank:] 空白字符(空格和制表符)

  [:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)

  [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

  [:digit:] 十进制数字[:xdigit:]十六进制数字

  [:graph:] 可打印的非空白字符

  [:print:] 可打印字符

  [:punct:] 标点符号

匹配次数:

  * 匹配前面的字符任意次,包括0次

  .*任意长度的任意字符

  \?匹配其前面的字符0或1次

  \+匹配其前面的字符至少1次

  \{n\}匹配前面的字符n次

  \{m,n\}匹配前面的字符至少m次,至多n次

  \{,n\}匹配前面的字符至多n次

  \{n,\}匹配前面的字符至少n次

位置锚定:

  ^ 行首锚定,用于模式的最左侧

  $ 行尾锚定,用于模式的最右侧

  ^PATTERN$ 用于模式匹配整行

  ^$ 空行

  ^[[:space:]]*$ 空白行

  \< 或\b词首锚定,用于单词模式的左侧

  \> 或\b词尾锚定;用于单词模式的右侧

  \<PATTERN\>匹配整个单词

分组:

  分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,

  分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...

    \1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

      示例:cat text |grep -o "\(cat\).*\1\b"

  后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身

  或者:\|

    示例:

      cat text |grep "cat\|dong"

3.基本正则表达式练习

1利用df和grep,取出磁盘各分区利用率,并从大到小排序

  df|grep -o "[[:digit:]]\+%"|sort -n

2找出/etc/passwd中的两位或三位数

  cat /etc/passwd |grep -o "\b[0-9]\{2,3\}\b"

3将此字符串:welcome to magedu linux中的每个字符去重并排序,重复次数多的排到前面
    echo ‘welcome to magedu linux‘ |grep -o ‘[^[:space:]]‘ |sort |uniq -c |sort -nr

4.扩展正则表达式

通过前面的练习我发现正则表达式写的时候有非常多的\,写好看起来和表情包一样,而且写的时候思路很清晰,但写完后阅读性极差,我们引人入了扩展正则即:egrep  \          grep  -e,其两者规则是一样的,只是扩展正则表达式少了很多\f方便阅读

字符匹配:

  . 任意单个字符

  [] 指定范围的字符

  [^] 不在指定范围的字符

次数匹配:

  *:匹配前面字符任意次

  ?: 0或1次

  +:1次或多次

  {m}:匹配m次

  {m,n}:至少m,至多n次

位置锚定:

  ^ :行首

  $ :行尾

  \<, \b :语首

  \>, \b :语尾

分组:

  ()

  后向引用:\1, \2, ...

  或者:|

总结:扩展正则在 后项引用\1,\2,\3,语首\<,\b语尾\>,\b的锚定时必须要添加\,其他地方不需要添加\

5.扩展正则练习

1、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

  cat /etc/rc.d/init.d/functions |egrep "^.*\>\(\)"

2、使用egrep取出/etc/rc.d/init.d/functions中其基名

  echo /etc/rc.d/init.d/functions/ |egrep -o "[^/]+/?$"

3、使用egrep取出上面路径的目录名表达式练习

  echo "/etc/rc.d/init.d/functions" |egrep -o ".*/." |egrep -o ".*/"

4、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255(经常被用来判断Ipv4地址的正确性)

  echo {1..300}|egrep -o "\b[0-9]\b|\b[1-9][0-9]\b|\b1[0-9][0-9]\b|\b2[0-4][0-9]\b|\b25[0-5]\b"(图太长了只截一部分)

5、显示ifconfig命令结果中所有IPv4地址

ifconfig |egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

原文地址:https://www.cnblogs.com/angge/p/9360358.html

时间: 2024-10-16 12:29:37

Linux入门——文本处理三剑客之grep的相关文章

谢烟客---------Linux之文本处理三剑客之grep

Linux之文本处理三剑客介绍 awk 名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母,它具备了一个完整的语言所应具有的几乎所有精美特性,AWK是一个解释器,三位创建者已将它正式定义为"样式扫描和处理语言".它允许您创建简短的程序,这些程序读取输入文件.为数据排序.处理数据.对输入执行计算以及生成报表,还有无数其他的功能.Linux使用的是Gnu版本的AWK,gawk grep 全称"Global search REgular express

linux文本处理三剑客之grep家族及其相应的正则表达式使用详解

一.Linux文本处理三剑客.grep家族和正则表达式介绍 Linux上文本处理三剑客: grep(egrep, fgrep):文本搜索工具:基于"pattern(过滤条件)"对目标文本进行逐行搜索操作: sed:Stream Editor,流编辑器行编辑工具:文本编辑工具: awk:GNU awk,文本格式化工具:文本报告生成器: grep家族: grep: Global search REgular expression and Print out the line,支持使用基本正

文本处理三剑客之-grep

文本处理工具: Linux上文本处理三剑客: grep:文本过滤工具(以模式过滤:pattern) sed:stream editor,流编辑器,文本编辑工具 awk:Linux上的实现为gawk,文本报告生成器(格式化文本) 正则表达式:regular expression  REGEXP 由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义, 而是用于表示控制或通配的功能: 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE 元字符:\(hello[[:space:]]\

Linux文本处理三剑客之grep一族与正则表达式

一,grep一族是什么? Linux上有三种常用的文本处理工具,分别为:grep(egrep.fgrep).sed.awk.这三者被称为Linux文本处理三剑客. grep一族:文本搜索工具 grep:支持使用基本正则表达式: egrep:支持使用扩展正则表达式,相当于grep -E: fgrep:不支持使用正则表达式,相当于grep -F; [PS:fgrep不需要加载正则表达式引擎,因此速度较快,fgrep的搜索效率在当文件达到几亿行时就能体现出来.(大型web网站一天的日志量都是几亿行的,

Linux 文本处理三剑客之grep &nbsp; egrep

Linux 文本处理三剑客之grep   egrep grep: Global search REgular expression andPrint out the line. 作用:文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行. 模式:由正则表达式的元字符及文本字符所编写的过元字符,其中正则表达示分基本正则表达式,和扩展正则正则表达式2类 元字符不表示其字面意义,而用于表示通配或控制功能滤条件.元字符有下面一些 字符匹配: .:匹配任意单个

Linux 系统中文本处理“三剑客”之grep

我们写脚本的时候,经常要截取命令输出的某项数据,比如:我要知道主机上有多少块硬盘 这是很方便的.使用grep搜索出我们想要的数据再使用 sed .或 cup 切割就可以取得我们主机的设备名称了,这是我们取数据的一种方法. Egreq 是grep 的升级版,支持扩展表达式.fgrep不支持正则表达式. 使用格式: 1 2 3 4 5 grep [OPTIONS] PATTERN [FILE...]      -o     只打印输出匹配到字符串      -i      做匹配时候忽略大小写   

linux文本处理三剑客之grep命令详解

Linux文本处理三剑客之grep grep:文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索) sed:stream editor,文本编辑工具 awk:Linux上的实现gawk,文本报告生成器 grep grep: Global search REgularexpression and Print out the line 作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查:打印匹配到的行 模式:由正则表达式字符及

文本处理三剑客之grep

文本处理三剑客之grep 正则表达式(regex) 文本处理工具 grep egrep 试验环境:CentOS 7.2 正则表达式 Linux的哲学之一"一切皆文件",学习Linux应得掌握其基本的文本处理工具,这些工具主要包括: 文件内容:less和cat 文件截取:head和tail 文件抽取:cut 关键字搜索:grep 正则表达式是计算机科学中的一个概念,又称作regex或RE, 正则表达式诞生于对神经网络研究的需要,随着技术发展,正则表达式已经广泛应用于各个领域,其主要应用对

Linux系统文本处理三剑客之awk

GNU awk: 文本处理三剑客:grep,sed,awk grep,egrep,fgrep:文本过滤工具:pattern sed:行编辑器 模式空间.保持空间 awk:报告生成器,格式化文本输出 gawk - pattern scanning and processing language 基本用法:gawk [options] 'program' FILE ... program:PATTERN{ACTION STATEMENTS} 语句之间用分号分隔 print,printf 选项: -F