linux之sed编辑器

一、sed编辑器

       sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,可以将数据行进行替换、删除、新增、选取等特定工作,简化对文件的反复操作,编写转换程序等。

二、sed工作流程

       sed的工作流程主要包括读取、执行和显示三个过程:

  • 读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。
  • 执行: 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
  • 显示: 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。

       容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。

三、sed命令格式

1、命令格式

  • sed  -e  '操作'  文件1  文件2  
  • sed  -n  -e  '操作'  文件1  文件2  
  • sed  -f  脚本文件  文件1  文件2  
  • sed  -i  -e  '操作'  文件1  文件2

2、常用选项

  • -e:直接在命令行模式上进行sed动作编辑,此为默认选项;
  • -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
  • -i :直接修改文件内容;
  • -n:只打印模式匹配的行;
  • -r :支持扩展表达式;
  • -h或--help:显示帮助;
  • -V或--version:显示版本信息。

3、常用命令

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

4、增删改查(可配合正则表达式)

  • 查: p  ​  
  • 删: d  ​  
  • 改: s(字符串替换)、c(整行替换)、y(对应字符进行替换,效果类似tr命令)  ​
  • 增: i(在行前插入内容)、a(在行后添加内容)、r(在行后读入文件的内容)  ​  
  • 复制粘贴:H(复制)、d(删除)、G(粘贴到指定行下方)

四、sed查找打印p(不指定行,顺序处理每一行)

1、sed编辑器默认输出行内容,-n选项可以禁止输出。如果不加-n,却使用p操作,那么每行内容会打印两次。

sed -e "p" :每行内容打印两次

sed -n "p" :每行内容只打印一次

2、‘n’打印行号 3、sed执行多条命令的三种方发

sed -n -e '=' -e 'p'  file.txt   #方法一

sed -n -e '=;p'  file.txt        #方法二

4、'l' 打印文本即隐藏字符(结束符$,制表符\t)

五、sed查找打印p(对指定行进行操作)

1、以数字形式表示区间

'1p'打印第一行
'$p'打印最后一行
'1,3p'打印连续行,打印第一行到第三行
'6,$p'打印第六行到最后一行
'1,+3p'打印第一行加后面三行(即打印第一到第四行)
'5q'打印前五行后退出
'p;n'打印奇数行
'n;p'打印偶数行

1)打印单行

2)打印连续的行,使用逗号

 3)打印1~3行

 4)使用sed输出奇数行或者偶数行

2、使用字符匹配出行

/root/p'

打印包含root的行
'/root/!p'打印不包含root的行。! 表示取反
'/^root/p'打印以root开头的行
'/bash$/'打印以bash结尾的行
'/root l bash/p'打印包含root或bash的行。"l"是扩展正则表达式的元字符,要使用sed -r
'6,/root/p'打印第6行到第一个包含root的行

sed -r 支持扩展正则表达式。同时在 使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\ 。  

六、sed删除d

1、以数字形式表示行区间

2、通过字符串匹配出想要的行 

七、替换字符串s

 

八、在行后添加内容a

九、在行前插入内容i 

十、在行后读入文件内容r 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值