"sed is a stream editor.
A stream editor is used to perform basic text transformations on an input stream(a file or input from  a  pipeline)"

sed: stream editor.

典型用途

  • 文本替换
  • 选择性打印文本文件
  • 从文本文件的某处开始编辑
  • 无交互式文本编辑

工作流程

sed 遵循一个简单的工作流:读取、执行和输出。

读取

sed 从输入流(文件、管道或标准输入)读取数据到模式缓冲区。

执行

所有 sed 命令对模式缓冲区的数据顺序执行。命令默认作用于所有行,除非指定某一行或几行。

输出

sed 将处理过的文本输出至输出流。输出数据后,模式缓冲区为空,该过程不断重复,直到文件耗尽。

基本用法

sed [选项]... {脚本/脚本文件} [输入文件]...

选项

-n :取消自动打印模式空间,同 --quiet --silence.

-e 脚本 : 添加脚本到执行列表,通过该选项可以使用多个执行命令。同 --expression.

-f 脚本文件 : 添加脚本文件到执行列表。同 --file.

-i : 直接将输出替换原文件,可以直接修改文件内容,慎用。同 --in-place.

未完待续…

命令

d : 删除当前模式空间。可以使用指定行号, , 分隔可指定一个范围内的多行。

p : 打印当前模式空间。同 d 可指定行号。

$ : 可以使用该符号打印最后一行内容,也可用 3,$ 表示第三行到最后一行。

+ : 例: '2,+3 p' 即代表打印第二行到第二行后的三行。

M,N : 代表从第M行到第N行。M、N可以是具体的行号,可以是匹配的字符串,也可以是 ^$ ,也可使在行号前使用 +

M~n : 即第M行开始,处理第M行及后续的每n行。

/Str/ : 例 sed -n '/Str/ p' 表示打印含有字符串 Str 的行。

w filename : 将模式空间中的内容写入filename文件中。可以指定行,也可以指定模式匹配。

a : 即追加内容,默认为追加内容到每一行,除非指定行号或模式匹配。

c : 即修改行内容,默认修改每一行内容,除非指定行号或模式匹配。注:该命令不能使用 +

i : 类似于 a 命令,在当前模式空间内行的前一行插入内容。默认插入内容到每一行,除非指定行号或模式匹配。

y/char_list1/char_list2/ : 字符转换命令,基于两个字符列表替换相应字符。

l : 可以显示文本中的隐藏字符,如行末符 $ \t 等。同样可以指定行号和模式匹配。还可以在其后跟数字在每行指定字符处换行。

q : 退出命令。同样支持指定行号和模式匹配。 例:'3 q' ,将会在第三行退出sed处理。

[address]r filename : 将filename中的内容读取到指定位置。