sed命令是流式编辑器(Stream EDitor)或行编辑器,工作在模式空间(pattern space),不操作源文件,只是把处理结果返回到屏幕上来,对源文件没有任何损害,sed命令默认支持正则表达式,也可以使用sed -r选项支持扩展正则表达式;
一、sed 的使用格式:
sed [options] ‘script’ input_file...
script指的是sed的脚本,input_file是被处理的文件;
sed [options] -f script_file input_file...
-f用来指定一个文件script_file(脚本文件);
sed ‘ADDR1,ADDR2command’ input_file 对ADDR1行和ADDR2行之间的行进行处理,第一行从序号1开始,美元符号($)表示最后一行;如果第一行写成0,这个命令执行看起来像是sed失效了。
sed ‘/PATTERN/command’ input_file (PATTERN指的是模式(正则表达式),只有模式
匹配到的行才执行命令;
sed ‘/PATTERN1/,/PATTERN2/command’ input_file 表示从包含PATTERN1的第一行
开始到包含PATTERN2第一行结尾;
二、sed 选项:
sed -i 直接操作源文件;
sed -n 静默模式,表示只显示处理以后的内容;
sed -r 使用扩展正则表达式;
sed -e 多点编辑,执行多个脚本,可以使用多个-e选项,或者使用一个-e选
项,后面的脚本用分号隔开;
三、sed 的子命令:
d 删除指定行,准确地描述为:删除当前模式空间内容(不再传至标准输出),并放弃之后的命令,并对新读取的内容,重头执行sed;
D 删除模式空间内第一个 newline 字母 \n 前的资料,准确地描述是:删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed。
p 模式空间中的文本在处理之前,每一次都会先显示;
! 对所选行以外的所有行应用命令
a \ 在模式匹配到的行后面添加新内容;
i \ 在模式匹配到的行前面添加新内容;
c \ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用 "\" 续行;
r FILE 读取FILE文件并且把FILE文件添加到某个文件中的某个特定位置;
w FILE 把FILE文件中模式能够匹配到的所有的行保存到另一个文件中;
y /string1/string2/ 把string1替换成string2;
s /patren/string/表示把patren匹配出来的内容替换为string(其中的“/”
有其特殊含义,所以使用时要注意转意,实际上可以替换为其它的无特殊
意义的字符,下面举例我们将用@符号替换);
g 全局的,找到所有的匹配字符,如果不加的话只匹配第一次出现的内容;
i 做模式匹配忽略大小写;
& 引用其前面的所有字符;
n 将模式空间拷贝于标准输出。用输入的下一行替换模式空间。
N 追加到下一行,sed命令每次读取一行,当第一行读取后会放到模式空间中
不处理然后接着读取第二行,读取完后将这两行一块处理,往下以此类推;
h 将模式空间的内容以覆盖的方式复制到保留空间;
H 将模式空间的内容以追加的方式复制到保留空间;
g 将保留空间的内容以覆盖的方式复制到模式空间;
G 将保留空间的内容以追加的方式复制到模式空间;
b 跳转,略过符合模式的行;
b label :label字符的长度不能超过7个;跳转到什么位置,其中的label是固
定字符;
x 保留空间和模式空间对调;
t label 测试:前面的s命令执行成功了就跳转到标记位置;
= 为每一行标记行号;
q 结束或退出sed
四、下面来详细讲解一下常用的命令或选项的用法及示例:
d删除指定行;











i 做模式匹配忽略大小写;
n 下一行;模式空间中的文本在处理之前,每一次都会先显示;
示例:以test1文本文件为例,我们查找文本中的每一行末尾的love、like,然后将它们替换成lover和liker:












sed
-i
'$a要插入的文字'
file
.txt
五、总结:
以上就是sed命令一些用法以及其常用选项、子命令的详细解析,讲解过程几乎完全基于作者记忆和个人理解进行,限于作者的经验和理解能力等,疏漏或错误在所难免,朋友们如对课程中内容的讲解有建议或者意见,欢迎给出指点和建议。