sed 日常常用处理应用


sed基于模式匹配过滤/修改文本。编辑器逐行处理文件,并将结果发送到屏幕。

sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。(摘抄)


注:编辑格式多条指令之间以分号隔开


sed命令

a 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

c 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行

i 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行

d 删除行

h 把模式空间里的内容复制到暂存缓冲区

H 把模式空间里的内容追加到暂存缓冲区

g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容

G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

l 列出非打印字符

p 打印行

n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理

q 结束或退出sed

r 从文件中读取输入行

! 对所选行以外的所有行应用命令

s 用一个字符串替换另一个

g 在行内进行全局替换

w 将所选的行写入文件

x 交换暂存缓冲区与模式空间的内容

y 将字符替换为另一字符(不能对正则表达式使用y命令)


选项 功能
-e 进行多项编辑,即对输入行应用多条sed命令时使用
-n 取消默认的输出
-f 指定sed脚本的文件名



示例:


sed -n 1,5p file.txt

解:输出第一至第五行文本中的内容。


sed -n 'p:n' file.txt

解:输出所有奇数行


sed -n 'n:p'

解:输出所有偶数的行


sed -n '/w2k8/,$p' file.txt

解:输出从第1个包含w2k8的行到最后一行


sed -n '/\<this\>/p' file.txt

解:输出包含单词this的行


sed '2.3d' file.txt

解:删除第2-3行文本


sed '/w2k8/d:$d' file.txt

解:删除包含


sed '/ne/!d' file.txt

解:删除不包含ne字符串的行。


sed '3.4s/hunter/BADBOY/g' file.txt

解:将第3-4行内的hunter都替换BADBOY


sed '1.2s/^/#/g' file.txt

解:在第1,2行的行首插入#  (注意:此次只是打印输出的时候在第1,2行里插入#并没有修改原文件,如果直接修改原文件在原文件中插入-i选项。)


sed 's/ter//g' file.txt

解:删除字符串ter(替换为空)