Sed(一)

2018-12-5笔记


Sed基础用法

语法格式

$ sed [options] '{range command}' {input files}

options

  1. -n,抑制默认输出
  2. -e,执行多条命令
  3. -f,执行sed脚本文件
  4. -i,直接修改源文件,-ibak会生成源文件的备份文件

range

使用行号

  1. 指定行,sed -n '2 p' fname.txt
  2. 逗号,sed -n '2, 4 p' fname.txtsed -n '2, $ p' fname.txt
  3. 加号
  4. 波浪号,sed -n '2~4 p' fname.txt

使用模式

  1. 单一模式,sed -n '/hello/ p' fname.txt,与指定的行号一样,指定存在hello的行
  2. 模式与数字,sed -n '/hello/, 4 p' fname.txt,相当于取第一次出现hello的行号,作为起始行号,因此结束行号也可以用模式替代。注意点,如果前4行没有hello,则退化成1
  3. 模式与加号

commands

  1. p,打印行
  2. d,删除行
  3. w fname.txt,保存行到文件

替换命令

替换命令的语法格式为,s/search/replacement/flags,例如

$ sed 's/hello/hi/' fname.tx

以默认的替换方式(没有flags),将fname.txt中的hello(search)替换成hi(replacement)
上述的/属于命令分界符,还可以使用#@!作为分界符,避免出现烦人的转义。

search
  • 使用确定性文本进行搜索,例如helloTom
  • 使用正则表达式进行搜索
replacement
  • 使用确定性文本
  • 引用正则表达式的分组
    • &用于表示匹配到的search,相当于Pythonregroup(0)
    • 括号分组使用\1开始(最多9个分组,即\9),用于进行分组回溯
  • GNU专用
    以下主要用于replacement中,主要是结合分组来使用,不然实际意义不大,因为分组匹配出来的文本是符合某个模式的,我们并不知道实际文本如何。
    • 持续型转换
      • \U,大写模式,将其后的所有分组变成大写
      • \L,小写模式,将其后的所有分组变成小写
      • \E,正常模式,不改变分组的大小写
    • 单字符型
      • \u,转换其后第一个字符为大写
      • \l,转换其后第一个字符为小写
flags
  1. gsed默认只替换第一个,使用全局标志g,可以实现全部替换,相当于times,默认为1
  2. 数字标志,相当于start,第几个开始执行替换
  3. p,打印替换后的行,需与-n一起使用
  4. w fname.txt,将替换后的行写入文件
  5. i,忽略search的大小写(仅用于GNU的sed)
  6. e,将替换后的行作为shell命令执行

你可能感兴趣的:(Sed(一))