2014年(3)
分类: LINUX
2014-08-14 23:43:58
sed [选项] {脚本 | 脚本文件} [输入文件],其中[ ]表示可选,{}表示必须。
首先将3个经常出现的选项解释如下:
上面出现了sed命令的三个最基本最常见的参数选项,其意思如下表所示:
-n选项 | 抑制sed命令的默认输出 |
-e选项 | 后接单引号包含的命令脚本,仅应用单个命令于输入文件时适用 |
-f 选项 | 指定一个文件包含多个脚本命令 |
这几个选项的使用模式大致如下:
sed -n -e 'cmd_script' input_file #注意,单引号扩住脚本命令
sed -f script_file input_file #将脚本命令写入一个单独的文件
其实,sed命令的选项并不是学习sed命令的主要内容,主要内容是对于sed命令脚本部分的学习。sed支持的脚本命令比较多,后面会详细介绍该部分内容,介绍sed支持的脚本命令之前,先介绍一下sed命令执行的原理。
下面以sed -f script_file input_file为例,其工作原理如下图所示:
其中input_file表示处理文件,script_file表示脚本命令。
工作原理如下:
a) 首先将处理文件的第一行读入模式空间。
b) 接着对模式空间中的这一行内容执行脚本命令中设置的命令,从上至下依次执行脚本命令中设置的命令。
c) 脚本命令执行完成后,输出模式空间中的内容。
d) 清空模式空间中得内容,并读入处理文件中得第二行内容,并重复b) 和 c) 步骤的内容,直至处理完文件中的所有内容。
苦逼的码农可以查看图片右上角的伪代码,可能解释得更加清晰一点。
下面先对几个经常出现的名词进行解释:
模式空间
以上描述中出现了一个词叫模式空间,下面对其进行解释。由于sed命令的执行并不修改原始文件,也就是说输入文件是什么,执行完sed命令后,输入文件没有变化,这么说来,肯定不能在输入文件的基础上对其进行编辑,所以需要一块单独的空间,用于转存文件中得内容,然后进行处理并输出。模式空间就是这么一块转存输入文件内容的空间,并且sed命令一次读入输入文件中得一行内容到模式空间,使用sed命令支持的脚步执行处理完模式空间中得内容后,输出处理完的结果并删除模式空间中得内容,准备读入下一行输入文件中得内容。
多行模式空间
如上所述,模式空间每次读入输入文件中的一行进行处理,有时只读入一行内容到模式空间对输入文件的处理能力很有限,比如它很难处理一个在一行末尾处开始,并在下一行开始处结束的短语。而多行模式空间就是为了解决这个问题而提出的,他允许将模式空间中的内容从一行扩展到多行。具体内容在本文后面会有讲解。
保持空间
模式空间是容纳当前输入行的缓冲区,而保持空间是预留的一部分缓冲区,用于临时存储模式空间中的内容。模式空间中的内容可以复制到保持空间,保持空间中的内容也可以复制回模式空间。具体内容在本文后面会有讲解。
sed命令所支持的脚本命令很多,常见的脚本命令有s、d、p、n、i、a、c、y等。其中还包括与多行模式空间相关的N、D、P命令(均大写)。与保持空间相关的h、H、g、G、x命令。