linux文本处理三剑客之一:grep

linux文本处理三剑客之一:grep

  • grep:文本过滤(模式:pattrn)工具

    • grep,egrep, fgrep(不支持正则表达式搜索)
  • sed:stream edittor 文本编辑工具
  • awk:linux上的实现gawk,文本报告生成器

1. grep

grep :Global search REguar expression and Print out the line
    作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查;打印匹配到的行
    模式:有正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN[FILE...]
    grep root /etc/passwd
    grep "$USER" /etc/passwd
    grep ‘$USER‘ /etc/passwd
    grep ‘$UESR‘ /etc/passwd
    grep `whoami` /etc/passwd

1.2 grep 命令选项

    --color=auto:对匹配的文本着色显示
    -v:显示不被pattern匹配到的行
    -i:忽略字符大小写
    -n:显示匹配的行号
    -c:统计匹配到的字符串
    -o:仅显示匹配到的字符串
    -q:静默模式,不输出任何信息
    -A n:after,后n行
    -B n:before,前n行
    -C n:context,前后各n行
    -e:实现多个选项间的逻辑or关系
        grep -e ‘cat‘ -e ‘dog‘ file
    -w:匹配整个单词   数字,字母,下划线算字母
    -E:使用ERE
    -F:相当于fgrep,不支持正则表达式
    -f file:根据模式文件处理

2. 正则表达式

REGEXP:Regular Expressions 由一类特殊字符及文本字符所编写的模式,
        其中有一些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:grep sed awk vim less nginx,varnish等
分两类:
        基本正则表达式:BRE
        扩展正则表达式:ERE
                grep -E,egrep
正则表达引擎:
    采用不同算法,检查处理正则表达式的软件模块
    PCRE(Perl Compatible Reguar Expressions)
元字符分类:字符匹配、匹配次数、位置锚定、分组
man 7 regex

2.1 基本正则表达式元字符:字符匹配

字符匹配:
    .  匹配任意单个字符
    [] 匹配指定范围内的任意单个字符,示例:[0-9][a-z][a-zA-Z]
    [^]匹配指定范围外的任意单个字符
    [:alnum:]字母和数字
    [:alpha:]代表任意英文大小写字符,亦即A-Z,a-z
    [:lower:]小写字母
    [:upper:]大写字母
    [:blank:]空白字符(空格和制表符)
    [:space:]水平和垂直的空白字符(比[:blabk:]包含的范围广)
    [:cntrl:]不可打印的控制字符(退格、删除、警铃...)
    [:digit:]十进制数字
    [:xdigit:]十六进制数字
    [:graph:]可打印的非空白字符
    [:print:]可打印字符
    [:punct:]标点符号

2.2 正则表达式:匹配次数

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

    *       匹配前面的字符任意,包括0次
                贪婪模式:尽可能长的匹配
    .*      任意长度的任意字符
    \?      匹配其前面的字符0或1次
    \+      匹配其前面的字符至少1次
    \{n\}   匹配前面的字符n次
    \{m,n\} 匹配前面的字符至少m次,至多n次
    \{,n\}  匹配前面的字符至多n次
    \{n,\}  匹配前面的字符至少n次
例:
    . 表示任意的一个字符
    .* 表示任意长度 字符
    [.*?] 表示 . * ? 中的某一个
    [^] 排除
    [[:lower:]] 表示任意一个小写字母
    a* 表示前面的字符出现任意次
    [[:lower:]]*  表示出现一次或多次小写字符
    a\? 表示a出现0次或一次  (可有可无)
    a\+ 表示a出现一次以上
    a\{10\} 表示a出现10次
    a\{10,20\}表示a出现10到20次
    a\{,20\}表示a出现20次以下
    a\{10,\}表示a出现10次以上
    a|bcd 表示a或bcd
    (a|b)cd 表示acd或bcd

    找出/etc/passwd中以bash和nologin结尾的行
    egrep "(bash|nologin)$" /etc/passwd

2.3正则表达式:位置锚定

位置锚定:定位出现的位置
    ^行首锚定,用于模式的最左侧
    $行尾锚定,用于模式的最右侧
    ^PATTERN$用于模式匹配整行
        ^$ 空行
        ^[[:space:]]*$空白行
    \<或\b词首锚定,用于单词模式的左侧
    \>或\b词尾锚定,用于单词模式的右侧
    \<PATTERN\>匹配整个单词

2.4 正则表达式:分组

分组:\(\)将一个或多个字符捆绑在一起,当做一个整体,如:\(root\)+
分组括号中的模式匹配到内容的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为:\1,\2,\3,...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例:  \(string1\+\(string2\)*\)  嵌套
        \1:string1\+\(string2\)*
        \2:string2 

例:
grep "\(hello\)\{2,\}"
%s/r\(..\)t/\1/g
%s/\(r..t\)/\1er/g

2.5正则表达式:后向引用

后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
示例:a\|b        a或b
      C\|cat      C或cat
      \(C|\c\)at  Cat或cat

grep -v "^$\|^#" /etc/file 

3. egrep 及扩展的正则表达式

  • egrep = grep -E
  • egrep [OPTIONS] PATTERN [FILE...]
  • 扩展正则表达式的元字符:

3.1字符匹配:

    .任意单个字符
    []指定范围的字符
    [^]不在指定范围的字符

3.2次数匹配:

    * 匹配前面字符任意次
    ? 0或1次
    + 1次或多次
    {m} 匹配m次
    {m,n} 至少m,至多n次

3.3位置锚定:

    ^  行首
    $  行尾
    \<,\b 语首
    \>,\b 语尾

3.4分组:

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

3.5 或者:

    a|b      a或者b
    C|cat    C或者cat
    (C|c)at  Cat或者cat

练习:


利用df和grep,取出磁盘各分区利用率,并从大到小排序
df |grep "^/dev/sd"|egrep -o ‘[[:digit:]]+%‘|tr -d % |sort -nr

找出/etc/passwd用户名和shell同名的行
egrep "^([^:]+):.*\<\1$" /etc/passwd
egrep  -o "^(.*)(:.*)\<\1$"  /etc/passwd

取出ifconfig eth0的ip
ifconfig ens33 | egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}"

取出ss.log日志中排名前三的ip地址
grep "^ESTAB" ss.log | tr -s ‘ ‘ :| cut -d: -f6|sort|uniq -c|sort -nr |head -3

将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前?
echo wecome to magedu linux | grep -o "."|sort|uniq -c |sort -nr

使?egrep取出/etc/rc.d/init.d/functions路径的?录名
echo /etc/rc.d/init.d/functions|egrep -o "^[/].*/"

计算年龄总和:
cat age.txt
xiaoming=20
xiaohong=18
xiaoqiang=22

cut -d= -f2 age.txt |tr -s "\n" +|egrep -o ".*[0-9]+" |bc
60

原文地址:https://blog.51cto.com/14451057/2426503

时间: 2024-10-12 19:34:25

linux文本处理三剑客之一:grep的相关文章

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家族及其相应的正则表达式使用详解

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

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 作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查:打印匹配到的行 模式:由正则表达式字符及

linux文本处理三剑客之grep

  一.linux文本处理三剑客介绍 linux中文本三剑客包括grep(egrep,fgrep),sed,awk,三者基本的功能如下: 工具名称 功能 grep,egrep,fgrep 文本过滤工具(搜索工具) sed stream editor, 流编辑器:文本编辑工具 awk 文本报告生成器 二.grep工具详解 1.grep的介绍: grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行

Linux 文本处理三剑客之grep

文本处理都要使用正则表达式,正则表达式有: 基本正则表达式:grep或者egrep -G 扩展正则表达式:egreo或者grep -E Linux 文本处理三剑客: sed:stream editor,流编辑工具程序. awk:linux上是gawk,格式化文本工具程序. grep:Global search Regular expression and print out the line 使用基本正则表达式的命令: grep egrep -G fgrep -G 使用扩展正则表达式的命令: g

Linux文本处理三剑客之grep及正则表达式

简要介绍 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.GREP是Global search Regular Expression and Print out the line的简称,即全局搜索正则表达式,它的使用权限是所有用户. 本篇文章从简明扼要,层次清晰的角度介绍grep命令和正则表达式,以及正则表达式和grep命令的配合使用. 1. 作用 文本搜索工具,根据用户指定的"模式(过滤条件)"对目标文本逐行进行匹配检查:打印匹

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

grep grep: Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查:打印匹配到的行 模式:由正则表达式字符及文本字符所编写的过滤条件 1.命令格式 grep [OPTIONS] PATTERN [FILE...] grep root /etc/passwd grep "$USER" /etc/passwd grep '$USER'

Linux文本处理&quot;三剑客&quot;--grep

稍微接触过linux都会知道有三个非常强大文本处理工具,那就是grep.sed和awk,想必都有听说过吧. Linux文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pattern): grep:基本正则表达式,支持-E,-F egrep:扩展正则表达式, 支持-G,-F fgrep:不支持正则表达式, sed:stream editor, 流编辑器:文本编辑工具: awk:Linux上的实现为gawk,文本报告生成器(格式化文本): 以上三款工具都支持正则表达式 正

linux文本处理三剑客—grep

cat:concatenate 文本文件查看工具 cat [option] filename... -n:给显示出来的文本行加上编号 -b:非空行编号 -V:显示 ^ -E:显示行结束符$ -T:显示制表符 -A:显示所有控制符-A=-VET -s:压缩连续的空行成一行 如:cat /etc/fstab /etc/passwd 同时查看多个文件 df | cut -d: tac:文本文件查看工具 用法同cat 只是文件内容的行逆序显示 rec:文本文件查看工具    用法同cat 只是文本文件每