文本三剑客之sed编辑器

96 阅读3分钟

文本三剑客:

grep :过滤行内容

awk :过滤字段

sed :过滤行内容,修改行内容

sed编辑器

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

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

  • 读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间)
  • 执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行
  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直到所有内容被处理完

sed命令格式

sed -e '操作' 文件1 文件2
sed -n -e '操作' 文件1 文件2
sed -f 脚本文件 文件1 文件2
sed -i -e '操作' 文件1 文件2

常用选项

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

常用操作

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

sed 打印

sed -e "p" 每行内容打印两次

sed -n "p" 每行内容只打印一次

image.png

image.png

'n' 打印行号

sed -n '=' 只打印行号

sed -e '=' 打印行号和行内容

sed -n '=;p' 打印行号和行内容

image.png

image.png

image.png

sed对指定行进行操作

以数字形式表示行区间

操作含义
'1p'打印第一行
'$p'打印最后一行
'1,3p'打印连续行,打印第一行到第三行
'6,$p'打印第六行到最后一行
'1,+3p'打印第一行加后面三行(即打印第一到第四行)
'5q'打印前五行后退出
'p;n'打印奇数行
'n;p'打印偶数行

使用字符串匹配出行

操作含义
'/root/p'打印包含root的行
'/root/!p'打印不包含root的行。! 表示取反
'/^root/p'打印以root开头的行
'/bash$/'打印以bash结尾的行
'/root l bash/p'打印包含root或bash的行。"l"是扩展正则表达式的元字符,要使用sed -r
'6,/root/p'打印第6行到第一个包含root的行

image.png

image.png

image.png

使用sed输出奇数行或者偶数行

image.png

image.png

使用正则表达式匹配行内容

image.png

sed 删除

以数字形式表示行区间

image.png

image.png

image.png

删除空行并保存

image.png

sed 修改替换

s:替换字符串

c:整行替换

y:字符替换,替换前后的字符串长度必须相同

格式:

sed -n s/旧字符串/新字符串/替换标记

image.png

整行替换 c

image.png

单字符替换 y

image.png

sed 增加 a i r

image.png

image.png

image.png