Linux学习-Sed 命令

sed 命令

  • sed 的模式空间

    • sed 工作方式

      • 将文件以行为单位读取到内存(模式空间)
      • 使用 sed 的每个脚本对改行进行操作
      • 处理完成后输出该行
    • sed 的替换命令 s:

      • sed 's/old/new/' filename
      • sed -e 's/old/new/' -e 's/old/new/' filename -e 表示多个文件进行操作
        • 可简写:sed 's/old/new/;s/old/new/' afile bfile ...
      • sed -i 's/old/new/' 's/old/new/' filename -i 表示替换完后原样的写回原文件
    • 带正则表达式的替换命令s:

      • sed 's/正则表达式/new' filename
      • sed -r 's/扩展正则表达式/new' filename
        • sed '/s/(aa)|(bb)/!' filename 匹配分组,aa或bb
        • +符号也属于扩展表达
    • 若被替换的内容中含斜线,可以把分隔符换成其他字符

      • sed 's!/!abc!' filename
    • sed 的回调用法

      • bfile 的内容:axyzb
      • sed -r 's/a.*b/\1 \1/' bfile 输出:axyzb axyzb
        上面 \1代表对a.*b调用,若有两组数要调用,则写成 \1 \2
  • sed 命令加强版

    • 全局替换

      • s/old/new/g g为全局替换,用于替换所有出现的次数
      • “/” 如果和正则匹配的内容有所冲突,可换为其它符号,如 “!”
    • s/old/new/标志位

      • s/old/new/2、s/old/new/3,后面的数字表示匹配第几个,第一个默认不写
      • g,全局替换
      • p 打印模式空间的内容
        • sed -n 'script' filename 阻止默认输出
        • sed -n 's/root/!!!!/p' 只输出匹配成功的这一行
      • w file 将模式空间的内容写入到文件
        • sed -n 's/root/!!!!/w /tmp/a.txt'
    • 寻址

      • 默认对每行进行操作,增加寻址后对匹配的行进行操作
        • /正则表达式/s/old/new/g
        • 行号s/old/new/g 行号可以是具体某一行,也可以是最后一行 $ 符号
          • sed '1,3s/old/new/' 1到3行
          • sed '1,$s/old/new/' 1到最后一行
          • sed '/root/s/old/new/' 在root这一行进行匹配替换
        • 可以使用两个寻址符号,也可以混合使用行号和正则表达式
          • sed '/^bin/,$s/old/new/' 以bin开头,到这行结尾进行匹配替换
        • 寻址可以匹配多条命令
          • /regular/
    • sed 脚本文件

      • sed -f sedscript filename
  • sed 的其他命令

    • 删除命令: [寻址]d 删除模式空间的内容,改变脚本的控制流,读取新的输入行,意味着d后面的指令是不会执行的。

      • sed '/ab/d' afile 注意,匹配到ab时,d 指令是删除整一行
    • 追加插入和更改:a 追加,i 插入,c 更改

      • sed '/ab/i hello' afile 在afie文件匹配到ab,则在ab所在行的上一行插入hello;把i改为a,则是在下一行进行插入;改成c,则把匹配的所在行改写成指定字符串
      • sed '/ab/r afile' bfile 将文件afile中的内容,匹配到ab的行,读取到bfile文件中;r命令改为w,则变成写入;在整个语句后面使用">",则会保存到一个新文件中。
    • 退出命令q与打印p,哪个效率更高

      • sed '10q' filename 读取文件的前十行,然后退出
      • sed -n '1,10p' filename 读取文件的前十行进行打印,然后退出
      • 因为sed的工作模式是逐行读取到内存再操作,'10q',是一次性读取,然后退出;'1,10p'是10行逐行读取后,再操作,最后退出;
  • sed 的多行模式

    • 多行模式处理命令:N,D,P
    • 为了应对配置文件是多行的情况
    • N:将下一行追加到模式空间
    • D:删除模式空间中的第一个字符到第一个换行符
    • P:打印模式空间中的第一个字符到第一个换行符
    • .符号在 sed 中支持多行模式,可以替代\n
posted @ 2020-04-15 23:38  chenzy01  阅读(172)  评论(0编辑  收藏  举报