sed和awk的学习

sed和awk的学习

sed

sed编辑器:可以用键盘命令来交互式地插入、删除或替换数据中的文本。

命令格式:sed options script file

  • 在命令行使用多个编辑器命令 sed -e ‘s/brown/green/; s/dog/cat/’ data1.txt

    或者输入第一个单引号标示出sed程序脚本的起始,直到输入了标示结束的单引号。

  • 从文件中读取编辑器命令 sed -f script1.sed data1.txt

sed基础
  1. 替换标记:

    • 数字,表明新文本将替换第几处模式匹配的地方;

      eg: sed ‘s/test/trial/2’ data4.txt

      sed替换每行中第二次出现的匹配模式。

    • g,表明新文本将会替换所有匹配的文本;

      eg:sed ‘s/test/trial/g’ data4.txt

    • p,表明原先行的内容要打印出来;

      eg:sed -n ‘s/text/trial/p’ data4.txt

      -n选项将禁止sed编辑器输出。但p替换标记会输出修改过的行。将二者配合使用的效果就是只输出被替换命令修改过的行。

    • w file,将替换的结果写到文件中。

      eg:sed ‘s/test/trial/w test.txt’ data5.txt

      将文本输出显示到test.txt文件中。

  2. 替换字符

    • 替换字符就是正斜线(/)

    • 替换文件中的路径名会比较麻烦。

      C shell替换/etc/passwd文件中的bash shell

      解决方案: sed ‘s//bin/bash//bin/csh/’ /etc/passwd

      其他字符来作为替换命令中的字符串分隔符:
      $ sed ‘s!/bin/bash!/bin/csh!’ /etc/passwd

  3. 使用地址

    • 两种行寻址:以数字形式表示行区间,用文本模式来过滤出行。

    • 两种形式都使用相同的格式来指定地址:[address]command

    • 数字方式的行寻址:

      eg:sed ‘2s/dog/cat/’ data1.txt

      解释:sed编辑器只修改地址指定的第二行的文本,

      eg:sed ‘2,3s/dog/cat/’ data1.txt

      解释:sed行地址区间,替换2到3行的文本

      eg:sed ‘2,$s/dog/cat/’ data1.txt

      解释:中从某行开始的所有行,可以用特殊地址——美元符。

    • 使用文本模式过滤器:sed编辑器允许指定文本模式来过滤出命令要作用的行。格式如下:
      /pattern/command

  4. 删除行 ‘d’

    eg:删除第三行: sed ‘3d’ data6.txt

  5. 插入和附加文本

    • 插入(insert)命令(i)会在指定行前增加一个新行;

      eg1:当使用插入命令时,文本会出现在数据流文本的前面。

      echo “Test Line 2” | sed ’ i\Test Line 1’

    • 附加(append)命令(a)会在指定行后增加一个新行。

      eg2:当使用附加命令时,文本会出现在数据流文本的后面。

      echo “Test Line 2” | sed ’ a\Test Line 1’

  6. 修改行:修改(change)命令允许修改数据流中整行文本的内容。

    ​ cat data6.txt

    ​ This is line number 1.
    ​ This is line number 2.
    ​ This is line number 3.
    ​ This is line number 4.

    ​ eg: sed '3c\ This is a changed line of text. ’ data6.txt

  7. 转换命令:转换(transform)命令(y)是唯一可以处理单个字符的sed编辑器命令。

    eg: sed ‘y/123/789/’ data6.txt

    解释:将123单个字符转换成789

    输出结果:

    ​ This is line number 7.
    ​ This is line number 8.
    ​ This is line number 9.
    ​ This is line number 4.

  8. 打印

    • p命令用来打印文本行;

      eg: echo "this is a test " |sed ‘p’

      输出结果:

      this is a test
      this is a test

    • 等号(=)命令用来打印行号;

      sed ‘=’ data6.txt

      输出结果:

      1
      This is line number 1.
      2
      This is line number 2.
      3
      This is line number 3.
      4
      This is line number 4.

    • l(小写的L)命令用来列出行。列出(list)命令(l)可以打印数据流中的文本和不可打印的ASCII字符。

      eg: cat data7.txt

      This line contains tabs.

      sed -n ‘l’ data7.txt

      输出结果:

      This\tline\tcontains\ttabs.$

      解释:制表符的位置用\t来显示,行尾的美元符号表示换行符。

  9. 使用sed处理文件

    • 写入文件:

      • w命令用来向文件写入行。

        eg: sed '1,2w test.txt ’ data6.txt

        cat test.txt

        This is line number 1.
        This is line number 2.

        解释:将data6.txt 文件中的1,2 行写入test.txt文件

      • 将文本模式的数据行写入目标文件。

        eg:cat data11.txt

        Blum, R Browncoat
        McGuiness, A Alliance
        Bresnahan, C Browncoat
        Harken, C Alliance

        sed -n ‘/Browncoat/w Browncoats.txt’ data11.txt

        cat Browncoats.txt

        Blum, R Browncoat
        Bresnahan, C Browncoat

    • 从文件读数据

      • 读文件

        cat data12.txt

        This is an added line.
        This is the second added line.

        sed ‘3r data12.txt’ data6.txt

        This is line number 1.
        This is line number 2.
        This is line number 3.
        This is an added line.
        This is the second added line.
        This is line number 4.

        解释:sed编辑器会将数据文件中的所有文本行都插入到数据流中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值