文本三剑客之sed

297 阅读2分钟

sed是什么

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

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

# sed工作流程

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

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

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

命令格式

sed -e '操作' 文件1 文件2 ....
sed -n -e '操作' 文件1 文件2 ...(-n可以跳过显示)
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1  文件2 ...(对文件直接修改)

sed -e 'n{
操作1
操作2
....                            ###一个sed命令实现多个方法
}

sed -e 'p' image.png

sed -e -n 'p'

image.png sed -n "="

image.png sed -e "=" image.png

sed -n "=;p" image.png sed -n "l" image.png

sed使用地址

sed编辑器有两种寻址方式

1.以数字形式表示行区间

2.用文本模式来过滤出行
sed -n '1p' testfilel ##显示第1行

sed -n '$p' testfilel ##显示最后一行

sed -n '1,3p' testfilel ##显示行区间(1到3行)

sed -n '1,+3p' testfilel ##显示打印(第一行和第一行的后三行)

sed -n '5p' testfilel ##显示到第五行就退出

sed -n 'p;n' testfilel ##显示奇数行

sed -n 'n;p' testfilel ##显示偶数行

sed -n '2,${n;p}' testfilel ##从第三行开始打印奇数行到最后一行

sed -n '1p' image.png

sed -n '$p'

image.png

sed -n '1,3p'

image.png sed -n '1,+3p'

image.png sed -n 'p;n'

image.png

sed -n 'n;p' image.png sed -n '2,${n;p}'

image.png

sed删除d

sed '1d' image.png sed '$d'

image.png sed 'd' image.png sed '1,+3d'

image.png sed '1!d' image.png sed '1,$!d'

image.png

sed '/4$/d' image.png

sed '/4$/!d' image.png

sed '/2/,/4/d' image.png sed '/^$/d' 删除空行

sed 替换 s c y i

sed -n 's/3/a/1p' image.png sed -n 's/3/a/2p' image.png

sed -n '/^root/ s/^/#/p' /etc/passwd image.png

sed '/333/c aa' image.png

sed 'y/23/ab/' image.png

sed增加a i r

a:在行后添加内容

i:在行前插入内容

r:在行后读入文件内容

sed '1a 22' image.png

sed '1,3a 22' image.png

sed '1a 22\n33\n44' image.png

sed '1i 22\n33\n44' image.png

sed '1r 1.txt' image.png

复制粘贴

image.png

剪切粘贴

image.png