Linux文本三剑客之sed

sed是一个强大的文本流编辑器,常用于自动化文本处理任务。它的工作流程包括读取、执行和显示,支持多种操作如查询、删除、替换和插入。sed命令常用选项有-e和-f,操作包括a、c、d、i、p和s等,可用于在特定行进行编辑。此外,sed还支持正则表达式进行内容匹配和处理。
摘要由CSDN通过智能技术生成

一、sed简介

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。

二、工作流程

sed 的工作流程主要包括读取、执行和显示三个过程。

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

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

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

注意:默认情况下所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

三、sed的常见用法

通常情况下调用 sed 命令有两种格式

sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数
“参数”是指操作的目标文件, 当存在多个操作对象时用,文件之间用逗号“,”分隔;
而 scriptfile 表示脚本文件,需要用“-f” 选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。

1、常见的sed命令选项

选项含义
-e 或–expression=表示用指定命令或者脚本来处理输入的文本文件。
-f 或–file=表示用指定的脚本文件来处理输入的文本文件。
-h 或–help显示帮助。
-n、–quiet 或 silent表示仅显示处理后的结果。
-i直接编辑文本文件。

2、常见的操作

操作”用于指定对文件操作的动作行为,也就是 sed 的命令。通常情况下是采用的“[n1[,n2]]”操作参数的格式。n1、n2 是可选的,代表选择进行操作的行数,如操作需要在 5~ 20 行之间

参数含义
a增加,在当前行下面增加一行指定内容。
c替换,将选定行替换为指定内容。
d删除,删除选定的行。
i插入,在选定行上面插入一行指定内容。
p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
s替换,替换指定字符
y字符转换。

3、基本用法实例

3.1 sed查询

  • sed -n ‘行号p’ :查看指定行信息

  • sed ‘5q’ :打印前5行信息后退出,q表示退出

  • sed -n ‘行1,行2p’ :查看从行1到行2的信息

  • sed -n ‘行1,+np’ :查看行1及行1后的n行信息

  • sed -n ‘3 {p;n;n;p}’ :n可以帮我们实现换行,p实现打印

  • sed -n ‘/字符串/ p’ :打印包含字符串的行

  • sed -n ‘/正则表达式/ p’ :打印所有包含正则能够匹配到的内容的行

sed -n ‘行号p’ :查看指定行信息

在这里插入图片描述

sed -n ‘行1,行2p’ :查看从行1到行2的信息

在这里插入图片描述

sed -n ‘行1,+np’ :查看行1及行1后的n行信息

在这里插入图片描述

sed -n ‘3 {p;n;n;p}’ :n可以帮我们实现换行,p实现打印

在这里插入图片描述
在这里插入图片描述

sed -n ‘/字符串/ p’ :打印包含字符串的行

在这里插入图片描述

sed -n ‘/正则表达式/ p’ :打印所有包含正则能够匹配到的内容的行

在这里插入图片描述

3.2 sed删除

  • sed ‘行号 d’ : 删除指定行号的行

  • sed ‘行1,行2 d’ : 删除行1与行2之间的行

  • sed ‘/字符串/ d’ :删除包含字符串的行

  • sed ‘/正则表达式/ d’ :删除所有包含正则能够匹配的到的内容的行

  • sed ‘行号,/字符串/ d’ :删除从指定行到第一个包含字符串的行

  • sed ‘/字符串1/,/字符串2/ d’ :从第一个字符串1的行开始删除到 第一个扫描到的字符串2的行,之后会继续扫描包含字符串1的行,然后继续执行删除和扫描字符串2的操作

sed ‘行号 d’ : 删除指定行号的行

在这里插入图片描述

sed ‘行1,行2 d’ : 删除行1与行2之间的行

在这里插入图片描述

sed ‘/字符串/ d’ :删除包含字符串的行

在这里插入图片描述

sed ‘/正则表达式/ d’ :删除所有包含正则能够匹配的到的内容的行

在这里插入图片描述

sed ‘行号,/字符串/ d’ :删除从指定行到第一个包含字符串的行

在这里插入图片描述

sed ‘/字符串1/,/字符串2/ d’ :从第一个字符串1的行开始删除到 第一个扫描到的字符串2的行,之后会继续扫描包含字符串1的行,然后继续执行删除和扫描字符串2的操作

在这里插入图片描述
在这里插入图片描述

3.3 sed替换sed ‘s/旧字符/新字符/’ :替换每行匹配到的第一个旧字符

  • sed ‘s/旧字符/新字符/n’ : 替换每行匹配到的第n个旧字符
  • sed ‘s/旧字符/新字符/g’ :替换每行匹配到的所有旧字符
  • sed ‘s/旧字符/新字符/w file’ :把替换后的行内容保存到指定文件
  • sed -n ‘s/旧字符/新字符/gp’ > file
  • sed ‘行号 s/旧字符/新字符/’ : 替换指定行的第一个匹配到的的字符串 最后加上g就是替- 换所有匹配到的旧字符
  • sed ‘行1,行2 s/旧字符/新字符/g’ :替换行1与行2区间的匹配行的对应的字符串
  • sed ‘/字符串/ s/旧字符/新字符/g’
  • sed ‘/正则表达式/ s/旧字符/新字符/g’
  • s/xx/xx/:后面的替换分隔符可以使用其他字符代替,需要确保三个分隔字符保持一致
  • sed ‘行号c xxxx’ 替换指定行的整行内容
  • sed ‘y/abc/123/’ 替换所有相对应的字符功能类似tr
sed ‘s/旧字符/新字符/替换选项’ 替换选项可以指定第几个旧字符进行替换,g表示全行替换

在这里插入图片描述
在这里插入图片描述

sed ‘s/旧字符/新字符/w file’ :把替换后的行内容保存到指定文件

在这里插入图片描述

sed -n ‘s/旧字符/新字符/gp’ > file 

在这里插入图片描述

sed ‘行号 s/旧字符/新字符/’ : 替换指定行的第一个匹配到的的字符串 最后加上g就是替- 换所有匹配到的旧字符

在这里插入图片描述

sed ‘行1,行2 s/旧字符/新字符/g’ :替换行1与行2区间的匹配行的对应的字符串

在这里插入图片描述

sed ‘/字符串/ s/旧字符/新字符/g’

在这里插入图片描述

sed ‘/正则表达式/ s/旧字符/新字符/g’

在这里插入图片描述

s/xx/xx/:后面的替换分隔符可以使用其他字符代替,需要确保三个分隔字符保持一致

在这里插入图片描述

sed ‘行号c xxxx’ 替换指定行的整行内容

在这里插入图片描述

sed ‘y/abc/123/’ 替换所有相对应的字符功能类似tr

在这里插入图片描述

3.4 sed插入

  • sed ‘行号i xxxx’ :在指定行上面插入xxxx

  • sed ‘行号a xxxx’ :在指定行下面插入xxxx

  • sed ‘行号r file’ :在指定行下面读取文件内容

  • sed ‘/root/{H;d};$G’ /etc/passwd :将包含root的行剪切到末尾,H表示复制;G表示粘贴

  • sed ‘1,2H;3,4G’ /etc/passwd :将1到2行复制到3和4行下面

  • echo “111222333” | sed -r ‘s/(111)(222)/\2\1/’ :将字符111和222互换位置

sed ‘行号i xxxx’ :在指定行上面插入xxxx

在这里插入图片描述

sed ‘行号a xxxx’ :在指定行下面插入xxxx

在这里插入图片描述

sed ‘行号r file’ :在指定行下面读取文件内容

在这里插入图片描述

sed ‘/行数/{H;d};$G’ :将指定行剪切到末尾,H表示复制;G表示粘贴

在这里插入图片描述

sed ‘1,2H;3,4G’ :将1到2行复制到3和4行下面

在这里插入图片描述

echo “111222333” | sed -r ‘s/(111)(222)/\2\1/’ :将字符111和222互换位置

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值