sed是一个流编辑器(stream editor。sed是一个非交互式的行编辑器,它在命令行中输入编辑命令、指定被处理的输入文件,然后在屏幕上查看输出。输入文件可以是指定的文件名,也可以来自一个管道的输出。sed不改变输入文件的内容,且总是将处理结果输出到标准输出,可以使用输出重定向将 sed的输出保存到文件中。
与 vi 不同的是 sed能够过滤来自管道的输入。在 sed 编辑器运行的时候不必人工干涉,所以 sed 常常被称作批编辑器 。此特性允许在脚本中使用编辑命令,
极大的方便了重复性编辑任务。当对文件中大量的文本进行替换时, sed 将是一个有利的工具。sed 以按顺序逐行的方式工作,过程为:
1. 从输入读取一行数据存入临时缓冲区,此缓冲区称为模式空间(pattern space)
2. 按指定的 sed 编辑命令处理缓冲区中的内容
3. 把模式空间的内容送往屏幕并将这行内容从模式空间中删除
4. 读取下面一行。重复上面的过程直到全部处理结束。
定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。
sed 命令的格式
sed 命令的格式如下:
格式1: sed [OPTION] [-e] command1 [[-e command2] ... [-e commandn]] [input-file]...
格式2: sed [OPTION] -f script-file [input-file]...
说明:
格式1:执行命令行上的sed编辑命令。可以指定多个编辑命令,每个编辑命令前都要使用 -e 参数,sed 将对这些编辑命令依次进行处理。若只有一个编辑命令
时,-e 可以省略。
格式2:执行脚本文件中的sed编辑命令。当编辑命令很多时,可将所有的编辑命令存成sed脚本文件,然后在命令行上使用 -f 参数指定这个文件。
常用参数:
-n : sed 在将下一行读入pattern space之前,自动输出pattern space中的内容。此选项可以关闭自动输出,此时是否输出由编辑命令控制。
-r : 使用扩展正则表达式进行模式匹配。
input-file:sed 编辑的文件列表,若省略,sed 将从标准输入中读取输入,也可以从输入重定向或管道获得输入
sed 的编辑命令包括地址和操作两部分。地址用于指定sed要操作的行;操作指定要进行的处理。
通常使用单引号将整个操作命令括起来
若操作命令中包含shell变量替换,应该使用双引号将整个操作命令括起来
地址的表示方法列表如下:
另外,在地址部分还可以使用 ! 表示反向选择,如 m ,n! 表示除了m 到n之外的所有行。
sed 支持 25 个操作,下面列出常用的几个,更多的操作的使用方法请参考 sed 手册。
常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!