sed编辑器

目录

三个过程

命令格式

单个操作命令格式

多个操作命令格式

脚本文件里定义

命令选项

操作命令

使用地址

打印内容

常用操作命令:p (通常加-n)  ,  =  ,  n

删除行 

常用操作命令:d

替换

常用操作命令:s  ;  c  ;  y  ;g  ;  w

插入行内容

常用操作命令:i  ;  a

复制粘贴行内容

常用操作命令:H  ;  G


sed是一种流编辑器

三个过程

  • 读取: 读取: 目标文件 的每行数据依次加入缓冲区(模式空间)里,默认从第一行开始读取
  • 执行:使用定义的增删改查命令来处理读取到暖冲区行数据
  • 显示:将处理后的行数据输出到屏幕显示

命令格式

单个操作命令格式

sed -e '操作命令' 目标文件1 目标文件2                             #对目标文件1 目标文件2进行操作              

sed 命令选项 -e '操作命令' 目标文件1 目标文件2              #对目标文件1 目标文件2进行操作

多个操作命令格式

sed -e '操作1' -e '操作2' 目标文件1 目标文件2            #对目标文件1 目标文件2进行多个操作

sed -e '{                                                                       #对目标文件1 目标文件2进行多个操作

操作1                                                                              {} 可以省略

操作2

}' 目标文件1 目标文件2

sed -n -e '操作1;操作2' 目标文件1 目标文件2             #对目标文件1 目标文件2进行多个操作

脚本文件里定义

sed -f 脚本文件 目标文件1 目标文件2                       #通过脚本里的操作对目标文件进行操作

命令选项

常用选项:

sed -e 或 --expression=          #用指定操作处理文件;只有一个操作命令时可以省略

        -f 或 --file=                        #用指定脚本文件来处理

-n 或 --quiet 或 silent              #禁止sed编辑器输出,但可以与p命令一起使用完成输出

        -i                                       #直接修改目标文本文件

        -r                                       #使用正则表达式使用(复杂就用)

        -h 或 --help                       #显示帮助

操作命令

常用操作 :

  • p                           #打印,如果同时指定行,表示打印指定行内容;                                                                                      如果不指定行,则表示打印所有内容;                                                                                          如果有非打印字符,则以ASCII 码输出。其通常与“-n”选项一起使用
  • =:                        #打印行号
  • n:                        #跳到下一行
  • d:                        #删除,删除选定的行
  • s:                        #替换,替换指定字符
  • c:                        #替换,将选定行替换为指定内容
  • y:                        #替换字符,转换前后的字符长度必须相同
  • w:                       #只保存修改过的内容到另一个文件
  • i :                        #增加;在指定行的上一行插入指定内容
  • a:                        #增加;在指定行的下一行插入指定内容
  • l(小写L):        #打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t.)

使用地址

sed两种寻址方式:

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

打印内容

常用操作命令:p (通常加-n)  ,  =  ,  n

sed -n  'p' 目标文件                       #打印目标文件所有内容

sed -n  '=' 目标文件                       #打印目标文件的行号

sed -n  '=;p' 目标文件                   #打印目标文件的行和内容

sed -n  '5p' 目标文件                     #打印第5行的内容

sed -n  '1,3p' 目标文件                  #打印1到3行的内容

sed -n  'p;n' 目标文件                    #打印奇数行内容

sed -n  'n;p' 目标文件                    #打印偶数行内容

sed -n '2,${n;p}' 目标文件             #打印第三行开始的奇数行

sed -n  '1~2p' 目标文件                 #打印奇数行内容       1表示第一行开始 ~2 表示每间隔2行

sed -n  '/user/p' 目标文件              #打印含有user行的内容

sed -n  '2,/user/p' 目标文件           #打印第二行到第一个含有user行的内容

sed -n  '/ftp\/root/p' 目标文件        #打印包含/ftp/root行的内容       与格式一样用 \ 进行转义   

sed -n '1,+3p' 目标文件                 #打印1之后连续的3行,即1到4行

sed -nr '/ro{1,}t/p' 目标文件           #-r表示支持扩展正则表达式

删除行 

常用操作命令:d

sed 'd' 目标文件                   #删除全部内容

sed '3d' 目标文件                 #删除第三行内容

sed '2,4d' 目标文件              #删除2到4行内容

sed '/^$/d' 目标文件             #删除空行

sed '/bash$/!d 目标文件      #删除除了bash结尾的行;    !表示取反

替换

常用操作命令:s  ;  c  ;  y  ;g  ;  w

行范围 s/旧字符/新字符/替换标记

sed 's/zx/jlh/' 目标文件                             #将第一个zx替换成jlh

sed 's/zx/jlh/g' 目标文件                           #将所有的zx替换成jlh

sed 's/zx/jlh/gp' 目标文件                         #将所有的zx替换成jlh并打印

sed '1,5s/zx/jlh/' 目标文件                        #将1到5行的每行第一个zx改为jlh

sed '1,5s/zx/jlh/g' 目标文件                      #将1到5行所有的zx改为jlh

sed '/root/ s/^/#/' 目标文件                       #将root所在行添加#

sed -rn 's/.*root.*/#&/p' /etc/passwd       #将root所在行添加#

sed '1,20s/^/#/w out.txt' 目标文件           #将1到20行添加#,并修改内容输出到out.txt

sed '1,20s/^/#/' 目标文件 > 新文件           #将1到20行添加#,将所有内容输出到新文件

sed -n 's/\/bin\/bash/\/bin\/csh/gp' /etc/passwd  #将/bin/bash全部替换成/bin/cash并打印
sed -n 's!/bin/bash!/bin/csh!p' /etc/passwd       #使用“!”作为字符串分隔符
sed -i 's9\945\9\99\98\939g' test.txt                     #将94599全部替换为9893

sed '5c jlh' 目标文件                                  #将第五行内容替换成jlh

sed 'y/145/ADE'                                         #所有的1替换成A               要对应

                                                                      所有的2替换成D

                                                                      所有的3替换成E

echo 111222333 | sed -r 's/(111)(222)(333)/\3\2\1/'         #将111222333 替换成 333222111

插入行内容

常用操作命令:i  ;  a

sed '1i zero' 目标文件            #在首行上插入zero

sed '$a zero' 目标文件           #在最后一行后插入zero

sed '1,3a zero' 目标文件        #在1到3行,每一行插入zero

sed '/one/a zero' 目标文件     #通过内容插入

复制粘贴行内容

常用操作命令:H  ;  G

复制完行之间会有空格

sed '1H;$G' 目标文件                  #粘贴第一行到最后

sed '1,3{H;D};$G' 目标文件        #剪切1到3行 复制到最后一行

  • 32
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值