sed用法大全

本文详细介绍了sed,一种流编辑器,依赖正则表达式处理文件内容。文章涵盖sed的基本概念、工作流程、命令格式及用法示例,帮助读者掌握sed的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

文章目录

目录

文章目录

前言

一、sed是什么?

二、学习步骤

1.工作流程

2.命令格式

3.用法示例

总结


前言

依赖正则表达式,读取文件内容,更具条件进行操作,我们可以用sed命令来操作


 

一、sed是什么?

sed是一种流编辑器,会在数据处理之前基于预先提供的一组规则来编辑数据流

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令中输入,要么存储在一个命令文本文件中

二、学习步骤

1.工作流程

读取  sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中

执行  在默认情况下,所有sed命令都在缓冲区中进行顺序的执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行 

显示  发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成前,上述过程将重复执行直到处理完

注意:sed的所有命令都是在缓存区进行的,并不修改文件,除非用i选项或重定向等

2.命令格式

sed -e '操作' 文件1 文件2 ...

sed -n -e '操作' 文件1 文件2 ...

sed -f  脚本文件  文件1 文件2 ...

sed -i -e '操作' 文件1 文件2 ...

语法sed [选项] '编辑指令文件文件2sed -e '编辑指令文件文件2 ...
 sed [选项-f scriptfile 文件文件2也可以用-f 来调用脚本来处理文件
选项 -e指定要执行的命令或脚本,一个时可以省略
  -n禁止输出,加上p后只输出处理后的行,读入时不显示
  -i直接编辑文本文件
指令p输出指定行
 a增加,在当前行下面增加一行指定内容
 c替换,将选定行替换为指定内容
 d删除,删除选定的行
 y字符转换   类似s,但必须目标和源字符长度相同
 s替换,替换指定字符
 r支持正则表达式   读取指定文件。
 w保存为文件
 i插入,在当前行前面插入
 =打印行号
 l打印数据流中的文本文件和不可打印的ASCII字符,$结束符,\t

3.用法示例

输出指定行sed -n 'p' /etc/passwd输出所有行        $p 末行
 sed -n '6p' /etc/passwd输出第6
 sed -n '6,8p' /etc/passwd输出第6-8
 sed -n 'p;n' /etc/passwd输出所有奇数行
 sed -n 'n;p' /etc/passwd输出所有偶数行
 sed -n '2,10{p;n}' /etc/passwd输出第2-10行的所有奇数行   2行作为第一行,是奇数行
 sed -n '2,${p;n}' /etc/passwd输出第2到末行的所有奇数行  2行作为第一行,是奇数行
 sed -n '2,+4p' /etc/passwd2行开始连续输出4行  2-6行
 sed -n '/root/p' /etc/passwd匹配包含字符串root的行    aroot 匹配
 sed -n '/\<root\>/p' /etc/passwd匹配包含单个字符串是root的行  aroot 则不匹配
 sed -n '10,/root/p' /etc/passwd匹配第10行开始(不含10行但会输出)到下一个包含root的所有行
 sed -nr '/ro{1,}t/p' /etc/passwd匹配不少于一次前导字符o,加-r参数
 sed -nr '/root|ntp/p' /etc/passwd匹配包含rootntp的行
 sed -n '/root/=' /etc/passwd包含root的行的行号输出   = 用来输出行号
 sed -e '5q' /etc/passwd输出前5行信息后q退出
 sed -n '/^PI/p' test.txt 
 sed -n '/[0-9]$/p' test.txt 
插入指定行sed '/12/i 123123' 222在所有含12的行前面插入一行123123
 sed '/12/a 123123' 222在所有含12的行下面插入一行123123
 sed '/12/i 123123\n33333' 222插入多行时用\n来表示换行
删除指定行nl test.txt | sed '3d'        sed '3d' /test.txt删除第 3 
 nl test.txt | sed '3,5d'删除第 3~5 
 nl test.txt |sed '/cross/d'删除包含 cross 的行            '/cross/d'取反
 sed '/^[a-z]/d' test.txt//删除以小写字母开头的行
 sed '/\.$/d' test.txt删除以"."结尾的行
 sed '/^$/d' test.txt删除所有空行
 sed '/2/,/3/d' test.txt从第一个位置打开删除,到第二个位置结束删除,若后面还有2,则继续执行
替换指定文本在使用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y(字符转换)命令选项
 行范围 s/旧字符串/新字符串/替换标记
四种替换标记数字表明新字符串将替换第几次匹配的地方,默认替换第一个
 g表明新字符串将替换所有匹配的地方
 p打印与替换命令匹配的行,与-n一起使用
 w文件,将替换的结果写到文件中
 sed 's/the/THE/' test.txt//将每行中的第一个the 替换为 THE
 sed 's/l/L/2' test.txt将每行中的第  替换为 L
 sed 's/the/THE/g' test.txt将文件中的所有the 替换为 THE
 sed 's/o//g' test.txt将文件中的所有删除(替换为空串)
 sed 's/^/#/' test.txt在每行行首插入#
 sed '/the/s/^/#/' test.txt在包含the 的每行行首插入#
 sed 's/$/EOF/' test.txt在每行行尾插入字符串EOF
 sed '3,5s/the/THE/g' test.txt将第 3~5 行中的所有 the 替换为 THE
 sed '/the/s/o/O/g' test.txt将包含the 的所有行中的 都替换为 O
多条要求同时执行sed -n -e '/145/=;/145/p' textsed -n -e '/145/='  -e '/145/p' text
 sed '1,20w out.txt' /etc/passwd 
 sed '1,20 s/^/#/w out.txt' /etc/passwd 
 sed '/45/c ABC' test整行替换
 sed '/45/ y/45/AB/' test指定字符替换,源与目标长度要一致
 sed '$a ABC' test在末行$前一行插入
 sed '1i ABC' test第1行下面插入
 sed '5r /etc/sesolv.conf' test.txt将/etc/sesolv.conf文件所有行插入目标文档的第5行下面
 sed '/root/{H;d};$G /etc/passwd将包含root的行剪切到末行,H复制到剪切板,G粘贴到指定行后
 sed '1,5H;15,16G' /etc/passwd将1-5行复制粘贴到第15行和16行后面。

总结

sed命令基本可以满足大部分的,对行进行操作的要求。若想过滤出行里面的具体内容,得需要用到其它的工具,如awk、grep等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值