一、sed命令介绍
sed 是 stream editor 的缩写,中文称之为“流编辑器”。
sed 命令是一个面向行处理的工具,它以“行”为处理单位,针对每一行进行处理,处理后的结果会输出到标准输出(STDOUT)。你会发现 sed 命令是很懂礼貌的一个命令,它不会对读取的文件做任何贸然的修改(除非加上-i选项),而是将内容都输出到标准输出中。
sed命令的语法:sed command file
command 部分:针对每行的内容所要进行的处理(这部分很重要很重要)。
file 部分:要处理的文件,如果忽略 file 参数,则 sed 会把标准输入作为处理对象。
sed命令的选项与参数:
-n : 使用静默模式,在一般的sed的用法中,所有来自stdin(标准输出)的数据一般都会被列出到屏幕上。
但如果加上-n参数后,则只要经过sed特殊处理的那行才会被列出来。
-e : 直接在命令行模式上进行sed的操作编辑
-f : 直接将sed的操作写在一个文件内,-f filename则可以执行filename内的sed操作
-r : 使用扩展正则表达式的语法
-i : 直接修改文件内容,而不是输出到屏幕上
command说明:[n1][,n2] action
n1,n2 : 一般代表【选择进行操作(action)的行数】,举例:如果我的操作是需要在
5行到20行之间进行的,则【5,20[action]】。
action的参数:
单行模式空间
a : 新增。a的后面接字符,而这些字符会在新增到下一行
i : 插入。i的后面接字符,而这些字符会在新增到上一行
c : 替换。c的后面接字符,这些字符替换n1到n2的行
d : 删除。因为是删除,所以d后面通常不接任何东西
p : 打印。将匹配的数据打印出来。通常p会与选项-n一起使用
s : 替换。将文件原内容替换为新内容。举例:s/lod/new/g
n : 读取匹配的数据的下一行,覆盖模型空间的前一行(也就是被匹配的行),结果交给下一个参数处理
多行模式空间
N : 读取匹配的数据的下一行追加到模式空间,同时将两行看做一行,但是两行之间依然含有n换行符
P : 打印。打印模式空间开端至n(换行)前面的内容,并追加到默认输出之前。
D : 如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,
而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环
替换标记
g 表示行内全面替换。
p 表示打印行。
w 表示把行写入一个文件。
x 表示互换模板块中的文本和缓冲区中的文本。
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记
& 已匹配字符串标记
其它
! 表示后面的命令对所有没有被选定的行发生作用。
= 打印当前行号码。
# 把注释扩展到下一个换行符以前。
二、sed 的工作原理与流程
工作原理:
sed 命令是面向“行”进行处理的,每一次处理一行内容。处理时,sed 会把要处理的行存储在缓冲区中,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。这个缓冲区被称为“模式空间”(pattern space)。在这个处理过程中,sed 命令并不会对文件本身进行任何更改。
工作流程:
主要包括读取、执行和显示三个过程。
- 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
- 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
- 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
2.1 模式空间与保持空间
**模式空间(pattern space):**
sed处理文本内容行的一个临时缓冲区,模式空间中的内容会主动打印到标准输出,并自动清空模式空间
**保持空间(hold space):**
sed处理文本内容行的另一个临时缓冲区,不同的是保持空间内容不会主动清空,也不会主动打印到标准输出,而是需要sed命令来进行处理
模式空间与保持空间的关系:
**模式空间:**相当于流水线,文本行在模式空间中进行处理;
**保持空间:**相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。可以使用高级命令h,H,g,G与模式空间进行交互。
模式空间与保持空间进行交互:
d : 删除模式空间的内容,开始下一个循环
D : 删除模式空间/n(换行符)前面的内容
h : 【复制】模式空间的内容至保持空间(会覆盖保持空间的原内容)
H : 把模式空间的内容【追加】至保持空间
g : 【复制】保持空间的内容至模式空间(会覆盖模式空间的原内容)
G : 把保持空间的内容【追加】至模式空间
x : 【交换】模式空间与保持空间的内容
3-sed命令演示
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net