sed用法总结

sed是一种流编辑工具,用于按行处理文本,支持添加、删除、替换等操作。常用选项包括-n(安静模式)、-e(多命令执行)、-f(读取动作文件)、-r(扩展正则)和-i(直接修改文件)。动作如a(追加)、c(替换)、d(删除)、p(打印)和s(替换)等,可以结合正则表达式进行复杂文本操作。
摘要由CSDN通过智能技术生成

sed介绍

sed是一种流编辑工具,流编辑工具就是把文本中的文字按照特定的分隔方式,进行数据流处理;

sed就是基于这种方式,它是以换行符以分隔单位,对文本进行逐行的处理。

sed命令格式

sed使用方式为: sed [选项] [动作] [inputfile]

选项

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e :直接在命令列模式上进行 sed 的动作编辑,即在同一行内执行多条命令,而不加-e则不可以。

-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作。

-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)。

-i :直接修改读取的文件内容,而不是输出到终端。

动作

  • a :新增行, a 的后面可以是字串,而这些字串会在下一行添加。
  • c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。
  • r :支持正则表达式,读取指定文件中的内容。
  • = :打印行号。
  • d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行。
  • i :插入行, i 的后面可以接字串,而这些字串会在上一行添加。
  • p :列印,将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行。
  • s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行。
  • w :将结果保存为文件。

一般动作的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。比如:sed -n "11d" test.txt,中的11就是表示只对11行进行处理,处理动作是删除11行。

用法示例

输出指定行
输出指定行sed -n ‘p’输出所有行
sed -n “2p”输出第二行
sed -n “2,4p”输出第二到第四行
sed -n “p;n”输出奇数行
sed -n “n;p”输出偶数行
sed -n ‘2,10{p;n}’输出2-10行所有的奇数行
sed -n ‘2,10{n;p}’输出2-10行所有的偶数行
sed -n 2,${n;p}输出2-10行所有的偶数行
sed -n “2,+4p”从第2行开始,连续输出4行
sed -n ‘/root/p’输出所有含root字符串的行
sed -n ‘/<root>/p’匹配包含单个字符串是root的行 如 aroot 则不匹配
sed -nr "/ab/p"
sed -nr “/root/=”输出包含root的行号
插入指定行
插入指定行sed “/aa/a abd”在所有含aa的下一行插入一行abd
sed “/aa/i abd”在所有含aa的上一行插入一行abd
sed “/aa/a abd\nccc”插入多行用\n来表示换行
sed “1a ddd”在第一行后插入一行ddd
sed “2i ddd”在第一行前插入一行ddd
删除指定行
删除指定行sed “2d”删除第二行
sed “1,3d”删除1-3行
sed “/11/d”删除包含11的行
sed “/1/d”删除小写字母开头的行
sed ‘/.$/d’删除以.结尾的行
sed ‘/^$/d’删除所有空行
替换指定内容

在使用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y(字符转换)动作。

替换标记

在替换时,可以根据标记自定义替换的方式,主要有以下几种:

  • 数字:如s/a/b/2将每行出现的第二个a替换成b。
  • g:新字符串替换所有旧的地方。

字符替换

字符替换sed “s/t/T/”将每行第一个t替换为T,默认不写数字时为1
sed “s/t/T/2”将每行第2个t替换为T
sed “s/t/T/g”将每行所有的t替换成T
sed ‘s/o//g’将每行所有的o替换为空串
sed ‘s/^/#/’在每行行首插入#
sed “/22/s/^/#/”在每个包含22的行首插入#
sed ‘3,5s/the/THE/g’将3-5行的所有the替换成THE

整行替换

sed “/22/c aaa”把含有22的行整行替换为aaa
sed “$c aaa”把最后一行替换为aaa
sed “3c hello”把第三行整体替换为hello
sed “/b$/c hello”以b结尾的行替换为hello
sed “/^1/c the”以1开头的行替换为the

参考

参考文章:sed命令用法详解
sed用法大全


  1. a-z ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tlqwanttolearnit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值