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

sed 和gawk基础

sed和gawk基础

sed

  • 定义

    • 流编辑器,通过预定义的一组规则,以行为单位来编辑数据流
  • 语法

    sed options [address]commad file

    • options为选项;[address]用于确定原文件的行的位置(包含单行,字符匹配,区间,多文本模式);command具体的命令;file为数据源(可来自键盘输入或管道符)
  • 选项说明

    • -e

      • 指定使用多条命令
    • -f

      • 从file中读取命令
    • -n

      • 抑制输出(只输出指定行)
    • -r

      • 使用正则表达式
  • 命令说明

    • -s

      • 替换
    • -p

      • 打印
    • -d

      • 删除
    • -i

      • 某行前插入
    • -a

      • 某行后附加
    • -c

      • 修改
    • -y

      • 字符转换
    • -r

      • 从某个文件中读取内容到原文件
    • -w

      • 从原文件中读取内容到新文件
  • 标志位(flags)

    • 数字

      • 对某行的第n处操作(精准匹配)
    • 定义

      • 对sed命令进行补充说明
    • g

      • 对某行的所有的匹配字符操作
    • p

      • 打印命令执行结果内容
    • w newfile

      • 保存内容到新文件
    • =

      • 打印内容时显示行号
  • 规则

    • 替换

      • 普通替换

        sed 's/pattern/replacement/flags' file

        • 找到第一处字符,进行替换
      • 寻址替换

        • 划定区间

          sed 'n,ms/pattern/replacement/flags' file

          • 找到n行到m行之间的字符,进行替换
        • 特定字符

          sed '/target/s/pattern/replacement/flags' file

          • 找到搜索字符的所在行,对字符进行替换
      • 正斜线“/”替换

        • 使用转义符

          sed 's/\/bin\/bash/\bin\/csh/' file

        • 使用!

          sed 's!/bin/bash!/bin/csh!' file

    • 删除

      • 删除全部内容

        sed 'd' file

      • 删除区间内行

        sed 'n,md' file

      • 删除匹配字符1到匹配字符2间的所有行

        sed '/target1/, /target2/d' file

      • 删除特定行

        sed 'nd' file

    • 插入和附加

      • 插入

        • 所有行之前插入内容

          sed 'i\content' file

        • 指定行之前插入内容

          sed 'ni\content' file

        • 区间行内前插入内容

          sed 'n,m\content' file

        • 匹配字符所在行前插入

          sed '/target/i\content' file

      • 附加

        • 所有行之后附加内容

          sed 'a\content' file

        • 指定行之后附加内容

          sed 'na\content' file

        • 区间行后附加内容

          sed 'n,m\content' file

        • 匹配字符所在行后附加内容

          sed '/target/a\content' file

    • 修改

      • 修改所有行

        sed 'c'\content file

      • 修改指定行

        sed 'nc'\content file

      • 修改区间内行

        sed 'n,mc\content' file

    • 字符转换

      • 所有行映射转换

        sed ’y/abc/ABC ' file

      • 指定行映射转换

        sed 'ny/abc/ABC'

      • 区间行内映射转换

        sed 'n,m/abc/ABC'

    • 打印

      • 打印全部内容

        sed 'p' file

      • 打印区间内行

        sed 'n,mp' file

      • 打印某行到最后行

        sed 'n,$p' file

      • 打印包含匹配字符行

        sed '/target/p'

    • 写入文件

      • 原文件所有内容写入新文件

        sed 'w newfile' file

      • 原文件某行写入新文件

        sed 'nw newfile' file

      • 原文件区间行写入新文件

        sed 'n,mw newfile' file

      • 原文件包含匹配字符的行写入新文件

        sed '/target/w newfile' file

    • 读取文件

      • 原文件读取新文件所有内容

        sed 'r newfile' file

      • 原文件从某行后开始读取新文件所有内容

        sed 'nr newfile ' file

      • 原文件从包含匹配字符的所在行后开始读取新文件所有内容

        sed '/target/r newfile' file

gawk

  • 定义

    • 支持处理数据并格式化输出的编程语言
  • 语法

    gawk options program file

    • options 为选项;program为gawk程序;file为数据源(也可以来自键盘输入和管道符)
  • 选项说明

    • -F

      • 指定字段分隔符
    • -f

      • 从文件中读取程序
    • -mf

      • 指定最大字段数量
    • -mr

      • 指定最大数据行数
    • -v

      • 指定程序变量和默认值
  • 程序说明

    • 格式

      gawk '{ xxxx ;xxxx;xxxx}'

      • 多条命令之间的分隔符为";"
    • 运行优先级

      gawk 'BEGIN{ xxx}'

      • 优先级最高,程序执行前执行

      gawk '{xxx}'

      • 优先级一般,程序的正常执行

      gawk 'END{xxx}'

      • 优先级最低,程序执行后执行
    • 定义变量和数组

      • 定义变量

        gawk -v var1=value 'BEGIN{print var1}'
        gawk 'BEGIN{var1=value;print var1 }'

      • 定义数组

        gawk 'BEGIN{ array[0]=a; array[1]=b; print array[0], array[1] }

    • 数据提取

      • 字段分隔符

        • 以冒号为字段分隔符(默认是空格)

          • 选项指定

            gawk -F ' :' '{pirnt $n,$m}' file

          • 程序定义

            gawk 'BEGIN{FS=":" } {print $0}' file

      • 字段提取

        • $0

          • 代表整个文本

            gawk '{print $0}' file

        • $1

          • 代表第一个字段

            gawk '{print $1}' file

        • $2

          • 代表第二个字段

            gawk '{print $2}' file

        • $n

          • 代表第n个字段

            gawk '{print $n}' file

        • $NF

          • 代表最后一个字段

            gawk '{print $NF}' file

      • 行记录提取

        • 行号匹配

          • 匹配第n行

            gawk 'NR==n {print $0}' file

        • 字段关键字

          • 匹配第n个字段包含特定字符的行

            gawk ’$n ~ /xxx/ {print $0}‘ file

          • 匹配第n个字段不包含特定字符的行

            gawk ’$n !~ /xxx/ {print $0}‘ file

      • 特定字符提取

        • 行列精准匹配

          • 匹配第n行第m列的字符

            gawk 'NR==n {print $m}' file

posted @ 2022-10-17 22:56  Tjane'Blogs  阅读(47)  评论(0)    收藏  举报