详解Sed命令的用法与正则表达式元字符

2019-09-23 09:00:50王冬梅

  G
  把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
  p
 打印当前模式空间内容,追加到默认输出之后
  n
  读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
  q
  结束或退出sed
  r
  从文件中读取输入行
  !
  对所选行以外的所有行应用命令
  s
  用一个字符串替换另一个
  g
  在行内进行全局替换:cat -n passwd.txt | sed 's@/bin/bash$@ /sbin/nologin@g'
  w
  将所选的行写入文件:sed '/^lixiaozi/w /app/lixiaozi.txt' passwd.txt
  x
  交换暂存缓冲区与模式空间的内容
  y
  将字符替换为另一字符(不能对正则表达式使用y命令) 

3.2 sed选项

  选项
  功能
  -e
  进行多项编辑,即对输入行应用多条sed命令时使用
  -n
  取消默认的输出
  -f
  指定sed脚本的文件名

4.退出状态

sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。

5.正则表达式元字符

  与grep一样,sed也支持特殊元字符,来进行模式查找、替换。不同的是,sed使用的正则表达式是括在斜杠线"/"之间的模式。

如果要把正则表达式分隔符"/"改为另一个字符,比如o,只要在这个字符前加一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。例如:sed -n 'o^Myop' datafile
    元字符
  功能
  示例
  ^
  行首定位符
  /^my/   匹配所有以my开头的行
  $
  行尾定位符
  /my$/   匹配所有以my结尾的行
  .
  匹配除换行符以外的单个字符
  /m..y/   匹配包含字母m,后跟两个任意字符,再跟字母y的行
  *
  匹配零个或多个前导字符
  /my*/   匹配包含字母m,后跟零个或多个y字母的行
  []
  匹配指定字符组内的任一字符
  /[Mm]y/   匹配包含My或my的行
  [^]
  匹配不在指定字符组内的任一字符
  /[^Mm]y/   匹配包含y,但y之前的那个字符不是M或m的行
  (..)
  保存已匹配的字符
  1,20s/(you)self/1r/   标记元字符之间的模式,并将其保存为标签1,之后可以使用1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。