0%

shell之初识sed和gawk(二)

初识sed和gawk(二)

更多的替换选项

之前学习到/s为替换文本,现在来详细研究该命令的使用方法

  • 替换标记
    • 默认这个标记只会替换每行出现的第一处,要让替换命令能够替换一行中的不同地方出现的文本需要使用到替换标记,具体格式如下:s/pattern/replacement/flags,有四种替换的标记:
    • 数字,表明新文本将替换第几处匹配的地方 sed 's/test/trial/2' data4.txt
    • g,表明新文本将会替换掉所有匹配到的文本 sed 's/test/trial/g' data4.txt
    • p,表明原先行的内容要打印出来 sed -n 's/test/trial/p' data5.txt. -n的意思是进制sed输出,但是p会将原先行的内容打印出来,配合的效果就是只输出了修改过的行
    • w file,将替换到的结果写到文件中去sed 's/test/trial/w test.txt' data5.tx,输出会保存到test.txt文件中去

使用地址

默认情况下sed使用的命令会作用到所有行上,如果想单独作用在某行或者某几行,就需要使用到行寻址

行寻址有两种形式:

  • 以数字形式表示行区间
  • 用文本模式来过滤出行

格式为:[address] command`或 address{command1 command2}

举个例子

  • 数字方式的行寻址

    • sed '2s/dog/cat/' data.txt即只修改了第二行的数据
    • sed '2,3s/dog/cat/' data.txt 行地址区间
    • sed '2,$s/dog/cat/' data.txt意思是从第二行开始的所有行
  • 使用文本模式过滤器

    sed编辑器允许指定命令来过滤要作用的行,使用下面格式:/pattern/command

    • sed '/harper/s/bash/csh' /etc/passwd意思是你只修改harper用户的行

删除行

删除行命令是d,这个需要格外的小心,如果你忘了加寻址模式的话,文本所有行都会被删除

  • 几个例子
    • sed '3d' data.txt删除第三行的数据
    • sed '3,$d' data.txt删除第三行后面的所有数据

插入和附加文本

  • 插入命令i会在指定行前增加一个新行(insert)
  • 附加命令a会在指定行后增加一个新行(append)
  • 命令格式:``sed ‘[address] command\ new line’
  • echo "text line 2" | sed 'i\text line 1'意思是在line2前会出现一个line1
  • sed '3i\this is a new world' data.txt在第三行前加一句话

修改行

  • 修改c(change)

转换命令

转换命令(transform)y是一个可以处理单个字符的命令,格式是:[address]y/inchars/outchars

  • sed 'y/123/456/' data.txt意思是将1转换为4,2转换为5.3转换为6.长度不同则会报错

其他命令

  • echo "this is a test" | sed 'p' p命令用来打印文本
  • [address] w filename w命令用来写文件
  • sed '1,2w test.txt' data.txt将data.txt中的前两行写到text.txt中区
  • [address] r filename r命令用来读取文件
  • sed '3r data.txt' data2.txt将data.txt 读到data2.txt的第三行后面去
~~