sed编辑器

一、sed编辑器

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。

二、sed编辑器工作流程

1、读取:

sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)

2、执行:

默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。

3、显示:

发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注:
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

三、命令格式

sed -e 【格式】文件1 文件2……
sed -n -e 【操作】文件1 文件2……
sed -f 【脚本文件】文件1 文件2……
sed -i -e 【操作】文件1 文件2……

四、常用选项

-e或- -expression= 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一 般在执行多个操作命令使用
f或- -file= 表示用指定的脚本文件来处理输入的文本文件
h或- -help 显示帮助
-n、- -quiet或silent 禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i 直接修改目标文本文件

打印行号和内容,行号在上,或者使用sed -n -e ‘=’ -e ‘p’ testsed1效果也一样
在这里插入图片描述
在这里插入图片描述

五、常用操作

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

六、使用地址

sed编辑器有2种寻址方式:
    以数字形式表示行区间
    用文本模式来过滤出行

以数字形式表示行区间
在这里插入图片描述
用文本模式来过滤出行
在这里插入图片描述
在这里插入图片描述

七、删除行

在这里插入图片描述

八、替换

1、格式
行范围 s/旧字符 /新字符 /替换标记

2、4种替换标记

数字:表明新字符串将替换第几处匹配的地方
g:表明新字符将会替换所有匹配的地方
p:打印与替换命令匹配的行,与-n一起使用
w 文件:将替换的结果写到文件中
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

### sed编辑器在CTF竞赛中的应用和技巧 #### 使用场景 sed编辑器作为一种强大的流式文本处理器,在处理大量日志文件、配置文件或其他纯文本数据时非常有用。特别是在CTF比赛中,当涉及到Web安全挑战或是逆向工程题目时,sed可以用来快速提取或修改特定模式的数据[^3]。 #### 基础语法介绍 对于初学者来说,掌握几个基本参数可以帮助更好地利用sed完成任务: - `-n` 参数配合 `p` 命令可实现仅打印匹配到的内容; - `-e` 可以在同一行内执行多个表达式; - `-f` 则允许从外部文件读取指令序列来进行批量处理; 这些特性使得即使是在时间紧迫的比赛环境下也能迅速构建起高效的解决方案。 #### 实际案例分析 假设在一个给定的日志文件中寻找所有访问过某个敏感页面(如/admin.php)的IP地址,并将其保存至新文件中供后续分析使用。此时就可以通过如下命令轻松达成目标: ```bash sed -n '/\/admin\.php/ s/^.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*$/\1/p' access.log > suspicious_ips.txt ``` 此段代码首先筛选出含有 `/admin.php` 的行,接着运用正则表达式捕获其中符合条件的IPv4格式字符串作为输出结果的一部分,最后将最终得到的信息写入新的文档里以便进一步审查。 #### 高级功能探索 除了简单的查找替换外,sed还支持更复杂的操作比如删除指定范围内的内容、追加额外信息等。例如要移除HTML源码里的注释部分,则可以用下面的方法: ```bash sed 's|<!--.*-->||g' index.html ``` 这会一次性清除掉所有的HTML注释标签及其内部文字而不影响其他结构。 另外值得注意的是,虽然sed默认情况下不会改变原文件而是直接输出改动后的版本,但如果确实有需要的话也可以借助重定向机制或者加上 `-i` 参数来实现在位更新的效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值