初识sed和gawk

sed编辑器

又被称作:流编辑器(stream editor),即 基于预先提供的一组规则来编辑数据流。

sed命令的格式如下: sed options script file

option选项:
-e script
-f file
-n :禁止 sed 编辑器输出

  1. 在命令行上定义编辑器命令

     $: sed 's/dog/cat/' data1.txt  # data1.txt中的dog替换成cat
     $: echo "This is a test" | sed 's/test/big test/'

    sed编辑器并不会修改文本文件的数据。它只会将修改后的数据发送到STDOUT。源文件内容不变。

  2. 在命令行使用多个编辑器命令(-e选项)

    
    #注意:命令末尾和分号之间不能有空格
    
    $: sed -e 's/brown/green/; s/dog/cat/'  data1.txt
  3. 从文件中读取多个编辑器命令(-f选项)

    $: cat script1.sed
       s/brown/green/
       s/fox/elephant/
    $: sed -f script1.sed data1.txt        

gawk程序(有待更新)

gawk程序是Unix中的原始awk程序的GNU版本。它提供了一种编程语言而不只是编辑器命令。

用途:

 定义变量来保存数据;
 使用算术和字符串操作符来处理数据;
 使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑;
 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告

命令格式:
gawk options program file

sed编辑器基础

  1. 替换标记

    sed 's/test/trial/' data1.txt #只会替换每行中出现的第一处

    格式:
    s/pattern/replacement/flags

    有4种可用的替换标记(flags):
     数字,表明新文本将替换第几处模式匹配的地方;
     g,表明新文本将会替换所有匹配的文本;
     p,会打印替换命令中指定的模式匹配的行(通常与 sed 的-n选项一起使用)
     w file,将替换的结果写到文件中

    #满足匹配模式的行会被保存到指定的输出文件中
    $: sed ‘s/test/trial/w test.txt’ data1.txt

  2. 替换字符
    当文本字符串中有一些不太方便在替换模式中使用的字符时(eg:正斜线(/)),可以使用字符分隔符;

    sed 编辑器允许选择其他字符来作为替换命令中的字符串分隔符;例如:

    
    # 将/bin/bash 替换成 /bin/csh
    
    $: sed 's!/bin/bash!/bin/csh!' /etc/passwd  #使用!
    $: sed 's&/bin/bash&/bin/csh&' /etc/passwd  #使用&
  3. 使用地址
    如果想将命令作用于某一行或某些行,必须用 行寻址
    可以:
    1) 以数字形式表示行区间
    [address]command
    包含多个命令:
    address {
    command1
    command2
    command3
    }

        # 替换第二行,第一个满足的
        sed '2s/dog/cat/' data.txt
        # 替换第2~6行,第一个满足的
        sed '2,6s/dog/cat/' data.txt
        # 替换第二到最后一行,第一个满足的
        sed '2,$s/dog/cat/' data.txt
    
        # 多个命令  
        $ sed '2{
        > s/fox/elephant/
        > s/dog/cat/ 
        > }' data1.txt

    2) 以文本模式来过滤出行

    /pattern/command

        # 将用户Samantha的默认shell由bash改为csh
        sed '/Samantha/s/bash/csh/' /etc/passwd
  4. 删除行命令(d)

    sed '3d' data.txt  # 删除第三行
    sed '2,5d' data.txt #删除2,3,4,5行
    sed '3,$d' data.txt  #删除第3到最后一行
    sed '/number 1/d' data.txt  #删除匹配 'number 1' 的行
    1. 插入和附加文本

      1) 插入命令 i :在指定行前增加一个新行
      2) 附加命令 a:在指定行后增加一个新行

    echo "test line 2" | sed 'i\test line 1'
    sed '3a\this is an append line' data6 
    sed '$a\this is an append line' data6  
    1. 修改行 (c)

      sed '3c\this is a changed line.' data6
      sed '/line 2/c\this is a change one.' data6  #文本模式来寻址
    2. 转换命令(y)
      可以处理单个字符的sed编辑器命令
      格式:

         [address]y/inchars/outchars/
      

      转换命令会对 inchars 和 outchars值进行一对一的映射。

      
      #将data.txt中 1替换城7,2 > 8,  3 > 9
      
      $ sed 'y/123/789' data.txt   
  5. 使用 sed 处理文件
    1)写入文件

    格式: [addreess]w filename

     $ sed '1,2w test.txt'  data.txt
    

    2)从文件读取数据

    格式:[address]r filename #address可以是一个行号 or 文本模式地址

       #将test.txt中的内容插入到data.txt的第三行之后
       $  sed '3r  test.txt'  data.txt  
       $ sed '/number 2/r data12.txt' data.txt
       $ sed '$r data12.txt' data.txt
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值