sed 入门到提高

声明: 以下所有的操作, 博主本人均在阿里云(ubuntu 18.04)上验证过, 可能不同的系统有些许差异, 还望大家学以致用。

本人能力有限,资历尚浅,若有错误,请轻点拍砖,若有建议, 不胜感激!!!

目录

工作原理

参数说明

动作说明

追加

基础

提高

替换

基础

删除

基础

提高

插入

打印

基础

提高

替换

基础

提高

1 .保留精确匹配到的部分, 替换其他部分:

2. &符号的使用

3. 需要匹配两行或者多行的情况

读入

写入


工作原理

sed读取一行,首先将这行放入到缓存中然后,才对这行进行处理处理完成以后,将缓冲区的内容发送到终端存储sed读取到的内容的缓存区空间称之为:模式空间

参数说明

-e以选项中指定的script来处理输入的文本文件, 一个语句中可以指定多个脚本。exp: sed -n -e '3p' -e '7p' a.txt
-f以选项中指定的script文件来处理输入的文本文件
-h显示帮助
-nquiet(静默)把处理之后的结果输出, 方便check
-V显示版本信息

 

动作说明

追加

  • 基础

a :追加, a 的后面可以接字串(string1),string1 会成为匹配行的下一行内容

exp: 

sed '4a llll' a.txt 在第四行之后追加一行, 内容为llll
sed '/b/a llll' a.txt(sed '/pattern/allll' a.txt)根据pattern匹配, 在匹配行之后追加一行, 内容为llll
  • 提高

在匹配行之后的某一行插入一行内容:

sed  '/aaa/{n;n;s/$/\nWORD/g}' a

替换

  • 基础

sed '2,5c kkkkk' a把2行和5行之间的所有内容
sed '/bbb/c kkkkk' a把匹配bbb的行都替换为kkkkk

注意:一定要区分s的替换, c的替换是整行的,而s是对字符串的替换

 

删除

  • 基础

d :整行删除,因为是删除,所以 d 后面通常不接任何咚咚.

基本格式是:  sed '地址命令‘  a.txt

地址的指定方式如下:

  1. #,#
  2. /pattern1/,/pattern2/
  3. /pattern1/,+n
sed  '5,9d' a.txt删除第3到第9行
sed  '/aaa/,/bbb/da.txt删除匹配"aaa"的行到匹配"bbb"的行之间的行
sed  '/aaa/,+10da.txt删除包含"aaa"的行以及之后的10行(共计11行)
  • PS:

  1. $ 表示结尾, 也可以用来指定地址;
  2. 由于 sed '地址命令‘  a.txt, sed的执行脚本有两部分组成, 如果你不指定地址, 根据sed行编辑的特性, 读一行删除一行, 整个文件都没了;
  • 提高

sed '/pattern/{n;d}' a.txt删除匹配到行的下一行内容
sed -n '$!N;/\n.*aaa/!P;D'删除匹配行的上一行内容
sed  '/pattern/{p;:a;N;$!ba;d}' a.txt

删除匹配的下一行到最后一行

sed '5~2d' a.txt从第5行开始, 隔行删除
sed '/aaa11/d;:go;1,X!{P;N;D};N;bgo' a删除匹配行以及之前X


插入

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

PS:要注意i 和a 的差别, i是在指定(或者匹配)地址的位置插入, 把匹配到的行挤到下一行了, 但是a实在匹配到的行的下一行追加

sed '1,4ihahaha' a.txt在文件第一行和第四行的每行下面新增一行, 内容为hahaha

打印

p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

基础

sed -n '3p' a.txt打印第三行的内容
sed -n '1,3p' a.txt打印第一行到第三行的内容
sed  -n '/patern/p' a.txt打印匹配到patern 的所有行的内容
sed  -n '/patern/=' a.txt打印匹配到patern 的所有行的行号
sed -n '/patern1/,/patern2/p' a.txt打印patern1和patern2之间的所有行内容(包含这两行)
  

提高

 sed -n '3p;7p' a.txt打印第三行和第七行, 等同于 sed -n -e '3p' -e '7p' a.txt
sed -n -e '/pattern/{n;p}'  a.txt打印匹配行的下一行
sed -n '/pattern/{x;p};h' a打印匹配行的上一行
sed -n -e '/pattern/{8,16p}' a把文本8到16行的内容中匹配到的行打出来

替换

  • 基础

s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!

可以先定位到行再替换:

  • 提高

1 .保留精确匹配到的部分, 替换其他部分:

sed 's/\(kernel\.core_pattern=\).*/\1core/g' a.txt

sed 's/\(匹配项\)需要被替换项/\1core/g' a.txt  ;\1 代表了括号匹配的内容

我们可以多次精准匹配, 并保留匹配到的结果

2. &符号的使用

sed 's/111e/hello_&/g' a.txt& 符号在sed命令中代表上次匹配的结果

ps: 上面1的操作也可以用此方法实现, 但是&符号只有一个, 上面的却可以有多个匹配保留项目

3. 需要匹配两行或者多行的情况

sed  '/aaa/{n;s/bbb/WORD&/g}' a

ps: 注意{里面的n; 这个是下一行的意思, 如果是需要匹配到第一个,然后匹配他的第三行, 再加一个n;

sed  '/aaa/{n;n;s/bbb/WORD&/g}' a

注意:以上两种多行匹配, 替换的也只是最后一次匹配行的行内内容, 如上例,只能替换掉第三行,如果想替换两次匹配之间的内容呢???

sed  '/aaa/{N;N;s/111/WORD/g}' a

读入

sed '/ccc/r b' a把文件b的内容追加到根据ccc匹配到的行后面

写入

sed -n '/ccc/,/ddd/w b' a把ccc行和ddd行之间的所有内容, 输入到文件b中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值