介绍
sed是一种非交互式流编辑器,可通过多种转换修改流经它的文本。本身不改变原文件,只改变流经其的文本,并打印到标准输出。如需将修改的内容保存在原文件上,则需加 -i选项。sed可做的动作主要包括删除、查找替换、添加插入、读取等等。通常用于大文本的处理,处理时以行为单位。
选项
sed使用命令为 sed -options ‘command’.
其主要选项(options)及其作用为:
-i :直接修改原文件
-e: 多条件编辑
-h: 帮助信息
-n: 不输出不匹配的行
-f: 指定sed脚本
命令
主要命令(command)有:
a: 在匹配行后加入文本
c:字符转换
d:删除行
D:删除第一行
i: 在匹配行前插入文本
y:转换文本
p:打印匹配的行
P:打印匹配的第一行
q:退出sed
r:从外部文件中读取文本
w:追加写文件
s/old/new:用new替换old(正则)
=:打印当前行号
使用
sed的使用通常结合正则表达式
- 删除
sed 'nd' file:删除第n行
sed 'm,n' file:删除第m至n行
sed 'n,$d' file:删除第n到最后一行
sed 'n!d' file:只保留第n行
sed '/a/d' file:删除所有包含a的行
sed '/^$/d' file:删除空行
- 查找替换
sed 's/old/new/' file:将每行第一个old替换成new(默认为第一个)
sed 's/old/new/n' file:将每行前n个old替换成new
sed 's/old/new/g' file:所有old替换成new
- 字符转换
sed 'y/old/new' file:将字符o,l,d分别转换为n,e,w。old及new字符数需一致
- 文本插入
sed 'n i insert' file:将insert插入第n行之前
sed 'n a insert' file:将insert插入第n行之后
sed '/old/i\insert' file:在匹配old的行前插入insert
sed '/old/a\insert' file:在匹配old的行后插入insert
- 读取文本
sed 'r file' file1:将file中读到的内容放入file1文本中
sed '/^$/r file' file1:将file中读到的内容放入file1的空行之后
sed '/old/r file' file1:将file中读到的内容放入匹配到old字符的行之后
- 打印
需加-n选项,只打印处理的行
sed -n 'np' fiel:打印第n行
sed -n 's/old/new/p' file:打印old替换成new的行
- 文件写入
sed 'm,n w output' file:将第m至n行的内容写入文件output中。(output文件将会被覆盖)
- 脚本调用
当sed执行步骤比较多的时候,可以使用。
sed -f sed.rule file:sed.rule为sed脚本,执行sed脚本并将执行得出的内容输出到file
以上是sed的基本使用,实际工作中对sed的使用可能更为复杂,通常需要结合复杂的正则表达式来进行转换,所以学好正则也是很有必要的。