sed : stream editor,逐行处理文本文件,流编辑。
sed 工作模式
每次依次读取文本文件的一行到模式空间pattern space(内存中的一段空间)中,对pattern space里的内容进行相应的处理,处理完毕后再读取下一行处理,直至处理完所有的文本行。
sed 命令格式
sed [OPTIONS] ‘script’ [INPUTFILE] …
script:地址定界、编辑命令
常用选项:
-n:不打印pattern space中的内容到stdout
-e:多点编辑
-i:直接编辑原文件
-f:读取文件里的script,每行一个
-r:使用扩展正则表达式
地址定界:
1、空地址
全文处理
2、单地址
#:表示某一个
/pattern/模式匹配到的行
3、地址范围
#,#
#,+#
#,/pattern1/
/pattern1/,/pattern2/
$:最后一行
4、步长:~
1~2:奇数行
2~2:偶数号
编辑命令
a \text 行后添加文本
i \text 行前添加文本
c \text 替换行文本
s/// 查找替换,常用的自定义分隔符s@@@,s###
替换标记:
g:全局替换
w:保存到文件
p:显示替换好的行
p:显示处理完的行
d:删除相应的行
= 为匹配到的行打印行号
!条件取反
w 保存模式空间匹配到的行到指定的文件
r 读取指定文件中的内容到当前模式匹配到的行后面
高级编辑命令:
h:把模式空间中的内容覆盖保存至保持空间hold space
H:把模式空间中的内容追加到保持空间
g:把保持空间中的内容的内容覆盖保存至模式空间pattern space
G:把保持空间中的内容追加到模式空间
x:把模式空间中的内存与保持空间的内容互换
n:匹配到的行的下一行覆盖保存至模式空间
N:匹配到的行的下一行追加到模式空间
d:删除模式空间中的行
D:删除模式空间中的所有行
示例:
sed -n 'n;p' FILE 显示偶数行
sed '1!G;h;$!d' FILE 逆序显示文本neir
sed '$!d' FILE取出最后一行
sed '$!N;$!D' FILE 取出最后两行
sed '/^$/d;G' FILE 删除原有的空白行后重新添加一个空白行
sed ‘n;d’ FILE 显示奇数行
sed 'G' FILE 在原有的每行下一行添加一个空白行