shell脚本中sed编辑器

一.sed编辑器简介

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快

二.sed工作流程

SED编辑器是一个流编辑器,主要用于对文本进行转换和编辑。它按照一系列的编辑命令逐行处理输入文本,并将结果输出到标准输出或指定的文件中。下面是SED编辑器的基本工作流程:

  1. 读取输入流:SED从标准输入或文件中读取文本数据,逐行处理。

  2. 执行编辑命令:对每一行文本,SED执行预定义的编辑命令或用户指定的编辑脚本。这些编辑命令可以是替换、删除、插入或其他文本转换操作。

  3. 应用编辑命令:SED根据编辑命令对当前行进行处理,并生成输出。如果没有指定编辑命令,则默认情况下,SED将原样输出文本。

  4. 输出结果:处理后的文本被发送到标准输出或者输出到指定的文件中,取决于用户的设置。

SED编辑器的工作流程可以通过命令行参数或者编辑脚本来控制。用户可以在命令行中指定编辑命令,也可以将编辑命令保存到脚本文件中,在需要时调用该脚本文件。SED提供了丰富的编辑命令,可以实现对文本的各种操作,如查找替换、删除行、插入文本等。

三.sed的基本语法

1.格式

sed [option]  'command'  file

1.OPTION:可选的参数,例如 -i 表示直接修改文件内容。

2."COMMAND"sed命令,用于指定要执行的操作,例如搜索、替换等。

3.FILE:要处理的文件名。

sed [option]... 'script;script;...' [input  file...]
        选项       自身脚本语法   支持标准输入管道

2.常用操作

  • s/pattern/replacement/flags:替换命令,用于将匹配到的模式替换为指定的内容。
    • pattern:要搜索的模式,可以是正则表达式。
    • replacement:要替换成的内容。
    • flags:可选的标志,例如 g 表示全局替换,i 表示大小写不敏感替换等。
  • d:删除命令,删除模式空间匹配的行,并立即启用下一轮循环。
  • p:打印命令,用于打印匹配到的行。
  • Ip :忽略大小写输出
  • a [\]text :在指定行后面追加文本,支持使用\n实现多行追加
  • i [\]text: 在行前面插入文本
  • a [\]text :在指定行后面追加文本,支持使用\n实现多行追加
  • c [\]text :替换行为单行或多行文本
  • w file : 保存模式匹配的行至指定文件
  • r file :读取指定文件的文本至模式空间中匹配到的行后
  • = :为模式空间中的行打印行号 
  • ! :模式空间中匹配行取反处理
  • q :结束或退出sed  

3.常用选项

  • -n:禁止自动打印模式空间的内容,只有经过命令显式输出的行才会被打印。
  • -e <script>:允许在命令行上指定要执行的 sed 脚本。可以多次使用 -e 选项来组合多个脚本。
  • -f <script-file>:从指定的文件中读取 sed 脚本。
  • -r 或 -E:使用扩展正则表达式。
  • -i.bak 备份文件并原处编辑
  • -s 或 --separate:将输入文件视为多个独立的文件,每次处理一个文件。
  • -u 或 --unbuffered:强制 sed 将其输出刷新到标准输出,而不是等到缓冲区填满后再输出。

示例:

(1)默认将输入内容打印出来,系统自带自动打印

(2)sed -e 'p' :打印文件中的内容

(3)-n 选项禁止自动打印模式空间的内容,只有经过命令显式输出的行才会被打印。

与p一起使用可以打印出命令内容

(4)sed  -n "="显示行号,sed -n "l" 显示特殊字符

(5)执行多个命令操作-e

4.sed命令格式

地址+脚本命令

(1)没有地址时:对全文进行处理(比如行号)

(2)单个地址

 #:指定的行,$:最后一行
  /pattern/:被此处模式所能够匹配到的每一行,正则表达式

(3)范围地址:            

范围地址解析
#p     #代表行号  打印第#行内容
#,# 从#行到第#行,3,6 从第3行到第6行
#,+# 从#行到+#行,3,+4 表示从3行到第7行
/pat1/,/pat2/第一个正则表达式  到   第二个正则表达式之间的行
#,/pat/从#号行为开始找到 pat为止     
  /pat/,#找到#号个pat为止

(4)步进:~

1~2:表示奇数行

2~2:表示偶数行

示例:

(1)打印第三行内容 sed  -n  "3p"

(2)打印第三行到第五行内容  sed  -n  "3,5p"

(3)打印文件最后一行的内容  sed  -n  "$ p"

(4)打印文件1-4行,2-5行内容   sed  -n  "1,+3p" ;sed  -n  "2,+3p"

(5)打印偶数行和奇数行

(6)从第二行开始到最后一行,n在前先加再打印

sed从第二行开始然后跳到下一行打印第三行

sed在第四行开始然后跳到下一行打印第五行

sed在第六行开始然后跳到下一行打印第七行

(7)过滤文件中含有root字符串的行 sed  -n  "/root/p"

(8)匹配文件中以root开头的行   sed -n "/^root/p"

(9)匹配文件中以bash结尾的行    sed -n "/^root/p"

(10)匹配文件中含有root和bash的行,扩展正则需要加-r, sed -n -r "/root|bash/p"

(11)匹配文件第二行开始到第一个含有root的行结束  sed -n -r "2,/root/p"

(12)匹配文件中含有  r..t  的行 ".."表任意两个字符   sed -n "/r..t/p"

(13)删除指定行

(14)删除空行和含有9的行

(5)从含有某个字符的行删除到含有另一个字符的行

四.搜索替代

格式:行范围 s/旧字符串/新字符串/替换标记

形式:s / / /;s@@@;s###

替换修饰符:

g   :行内全局替换
p   : 显示替换成功的行
w   :将替换的结果写到文件中
I,i   :  忽略大小写

示例:

(1)搜索替换,将每行第一个root替换为admin

sed   -n   's/root/admin/p'

(2)搜索替换,将每行第二,三个root替换为admin

在文件内容的开头添加内容

格式:sed  s/^/添加的内容/ 文件

示例:

(1)在passwd文件内容的开头添加“#”

(2)给含有root的行开头添加#注释

“$”代表前面匹配到的内容

整行替换

“c”替换行为单行或多行文本

格式:sed  "#c  新内容"  文件名  //替换第#行的全部内容

   sed "/旧内容/c  新内容"  文件名 //将被选到的含有旧内容的行替换为新内容

字符替换

格式:sed  ' y/旧字符/新字符/ '  文件名

添加行内容

行前添加

格式:sed  '#i   添加的内容'  文件  //在第#行前添加一行内容,$i代表在最后一行前添加

行后添加

格式:sed  '#a   添加的内容'  文件 //在第#行后添加一行内容,$a代表在最后一行后添加

示例:

插入文件内容

格式:sed  '#r  文件2绝对路径'   文件1  //将文件2的内容在文件1的第#行下插入

剪切粘贴

H:复制      d:删除    G:粘贴

格式:

单行:sed  'n {H;d};#G'  文件名   //将第n行剪切粘贴到第#行后

多行:sed  'n,m  {H;d};#G'  文件名   //将第n到m行剪切粘贴到第#行后

示例:

将第2-4行剪切粘贴到第5行后和将第2-4行剪切粘贴到最后一行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值