Linux文本处理工具之grep sed简概

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文本处理工具之grep sed简概相关的知识,希望对你有一定的参考价值。

Linux文本处理工具之grep sed

在Linux系统中,有一个哲学思想:Linux系统下,一切皆文件。
由此可见,有关文本处理的工具有多重要,而我们经常用到文本处理工具主要有grep,sde,以及awk,也就是所称的“文本三剑客”,而在本篇博客中,着重讲解grep和sed的概念及用法,希望对大家的linux学习之路有所帮助,如有不足,请多多指正!

目录

  1. grep概念及解析
  2. grep命令选项
  3. 正则表达式及扩展正则表达式
  4. sed概念及解析
  5. sed命令选项

    grep概念及解析

    grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用基本的正则表达式来搜索文本,并把匹配的行打印出来。
    grep是很常见也很常用的命令,它的主要功能是进行字符串数据的比较,然后符合用户需求的字符串打印出来,但需要注意的是,grep在数据中查找一个字符串时,是以“整行”为单位进行数据筛选的。
    egrep命令等同于grep -E,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。
    fgrep命令等同于grep -F,它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。

    grep命令选项

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

    正则表达式及扩展正则表达式

    (1)正则表达式介绍
    正则表达式,又称正规表示法、常规表示法(Regular Expression,在代码中常简写为regex、regexp或者RE),正则表达式使用单个字符串来描述、匹配一系列符号某个句法规则的字符串。在很多文本编辑器中,正则表达式通常被用来检索、替换那些符号某个模式的文本。
    (2)元字符及定义
    ^:行首
    $:行尾
    .:任意单一字符
    [ ]:[ ]内任意单一字符
    [^] :除[ ]内任意单一字符
    前面字符重复不确定次数
    +:+前面字符重复一次以上不确定次数
    \?:?前面字符重复0或1次
    \:转义符
    .:任意长度字符
    {n}:前面字符重复n次
    {n,}:前面字符重复n次以上
    {m,n}:前面字符重复m次和n次之间
    [:alnum:]:字母和数字
    [:alpha:]:代表任何英文大小写字符,亦即 A-Z, a-z
    [:lower:]:小写字母
    [:upper:]:大写字母
    [:blank:]:水平空白字符(空格和制表符)
    [:space:]:所有水平和垂直的空白字符(比[:blank:]包含的范围广
    [:cntrl:]:不可打印的控制字符(退格、删除、警铃...
    [:digit:]:十进制数字
    [:graph:]:可打印的非空白字符
    [:print:]:可打印字符
    [:punct:]:标点符号
    [:xdigit:]:十六进制数字
    (3)扩展正则表达式元字符及定义
    . 任意单个字符
    [ ]:指定范围的字符
    [^]:不在指定范围的字符
    :匹配前面字符任意次
    ?:0或1次
    +:1次或多次
    {m}:匹配m次
    {m,n}:至少m,至多n次
    ^:行首
    $:行尾
    \<, \b:语首
    \>, \b:语尾
    |:或,a|b,匹配a或者b
    ():分组,如N(ame|AME)
    ()+:多个重复组的判别,如查找A开头B结尾,中间有一个以上的xyz A(xyz)+B

    sed概念及解析
    sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区中,称为"模式空间(pattern space)",接着用舍得命令处理缓冲区中的内容,处理完成后,把缓存区的内容输出。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你是用重定向存储输出。sed主要用来编辑一个或多个文件。
    功能:主要用来自动编辑一个或多个文件,简化对文件的反复 操作,编写转换程序等
    用法: sed [option]... ‘script‘ inputfile...

    sed命令选项
    -n:不输出模式空间内容到屏幕,即不自动打印
    -e: 多点编辑
    -f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
    -r: 支持使用扩展正则表达式 -i.bak: 备份文件并原处编辑
    script: ‘地址命令‘
    d: 删除模式空间匹配的行,并立即启用下一轮循环
    p:打印当前模式空间内容,追加到默认输出之后
    a []text:在指定行后面追加文本 支持使用\n实现多行追加
    i []text:在行前面插入文本
    c []text:替换行为单行或多行文本
    w /path/somefile: 保存模式匹配的行至指定文件
    r /path/somefile:读取指定文件的文本至模式空间中 匹配到的行后
    =: 为模式空间中的行打印行号
    !:模式空间中匹配行取反处理
    sed高级编辑命令
    P:打印模式空间开端至\n内容,并追加到默认输出之前
    h: 把模式空间中的内容覆盖至保持空间中
    H:把模式空间中的内容追加至保持空间中
    g: 从保持空间取出数据覆盖至模式空间
    G:从保持空间取出内容追加至模式空间
    x: 把模式空间中的内容与保持空间中的内容进行互换
    n: 读取匹配到的行的下一行覆盖至模式空间
    N:读取匹配到的行的下一行追加至模式空间
    d: 删除模式空间中的行
    D:如果模式空间包含换行符,则删除直到第一个换行符的模 式空间中的文本,并不会读取新的输入行,而使用合成的模 式空间重新启动循环。如果模式空间不包含换行符,则会像 发出d命令那样启动正常的新循环

    以上就是本人在linux学习中对grep,sed的用法和见解,如有不足,请指正!

以上是关于Linux文本处理工具之grep sed简概的主要内容,如果未能解决你的问题,请参考以下文章

文本处理三剑客之grep

文本处理工具之:grep sed awk

Linux文本处理工具三剑客之grep

linux文本处理三剑客之grep

Linux文本处理之 grep egrep

文本处理工具之grep