• Linux--shell脚本之文本处理工具


    文本处理工具--grep、sed、awk

      Bash Shell提供了功能强大的文件处理工具:sed(流编辑器stream editor)和awk,都可使用正则表达式进行模式匹配。

    而grep又有助于理解sed和awk。

    1、grep

    Linux系统中grep命令是一种强大的文本搜索、查找过滤工具,,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全

    称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

    grep格式:grep [选项] [模式] [文件...],它在一个或多个文件中搜索满足模式的文本行。

    常用的grep选项有:
      -c 只输出匹配行的计数。
      -i 不区分大小写(只适用于单字符)。
      -h 查询多文件时不显示文件名。
      -l 查询多文件时只输出包含匹配字符的文件名。
      -n 显示匹配行及行号。
      -s 不显示不存在或无匹配文本的错误信息。
      -v 显示不包含匹配文本的所有行。

    eg:(在前一篇正则表达式中已经写到了,这里偷个懒,把昨天的图用一下吧)

    2、sed

      sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed

    的输入,经过一系列编辑命令转换为另一种格式输出。 sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相

    同的。
    sed命令行的基本格式为:
      sed option 'script' file1 file2 ...

      sed option -f scriptfile file1 file2 ...
     sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以多次传入多个文件,sed会依次处理。 sed

    的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后用-f参数指定,编辑命令的格式为:

      /pattern/action

      其中pattern是正则表达式,action是编辑操作。 sed程序一行一行读出待处理文件,如果某一行与pattern匹配,则执行相应的action,

    如果一条命令没有pattern而只有action,这个action将作用于待处理文件的每一行。

    sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的行。
    命令
      a : 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“”续行
      c :用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每⾏末尾需用”"续行
      i :在当前行之前插入文本。多行时除最后一行外,每行末尾需用”"续行删除行
      h : 把模式空间里的内容复制到暂存缓冲区
      H : 把模式空间里的内容追加到暂存缓冲区
      g : 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
      G: 把暂存缓冲区的内容追加到模式空间⾥,追加在原有内容的后面
      l : 列出非打印字符
      p : 打印行
      q : 结束或退出sed
      r : 从文件中读取输入行
      ! : 对所选行以外的所有行应用命令
      s : 用一个字符串替换另一个
      g : 在行内进行全局替换
      w : 将所选的行写入文件
      x : 交换暂存缓冲区与模式空间的内容
      y : 将字符替换为另一字符(不能对正则表达式使用y命令)
    选项
      -e : 进行多项编辑,即对输入行应用多条sed命令时使用
      -n : 取消默认的输出
      -f :指定sed脚本的文件名



    3、awk

      sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。 awk缺省的行分隔符是换行,缺

    省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有干个字段,字段之间以:分

    隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。 awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和

    循环结构,但是基本语法和sed类似,awk命令行的基本形式为:

      awk option 'script' file1 file2 ...


      awk option -f scriptfile file1 file2 ...
      
      和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以

    -f参数指定一个脚本文件,编辑命令的格式为:

      /pattern/{actions}

      和sed类似,pattern是正则表达式,actions是一系列操作。 awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满

    condition条件,则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。

    eg:

    注:

    $0:表示当前行

    $1:表示当前行的第一列

    $2:表示当前行的第二列

  • 相关阅读:
    【LeetCode-动态规划】编辑距离
    【LeetCode-栈】计算器
    【LeetCode-栈】字符串解码
    【LeetCode-数组】缺失的第一个正数
    【LeetCode-查找】寻找重复数
    【LeetCode-堆】丑数
    【LeetCode-堆】数据流中的第K大元素
    【LeetCode-排序】根据身高重建队列
    立项与启动
    JS中match方法探究
  • 原文地址:https://www.cnblogs.com/hanxiaoyu/p/5760673.html
Copyright © 2020-2023  润新知