Linux Shell基础知识13 sed编辑器

13.1 sed编辑器

sed编辑器是一种流编辑器,每次从输入读取一行数据,将该数据与所提供的编辑器命令进行匹配,根据命令修改数据并输出到STDOUT。,重复上述过程,直到处理完全部数据。从上述过程可知,sed只读取数据流一次,因而比交互式编辑器快得多。

13.2 sed使用

13.2.1 格式

sed options script file,其中options表示命令选项,script表示对数据处理的命令,file表示要处理的数据,如果file参数为空,则将STDIN作为输入。

选项描述-e script将脚本中指定的命令添加到处理输入时执行的命令中-f file将文件中的命令加入处理命令中-n不需要为每个命令产生输出,但要等待打印命令

13.2.2 一般用法

(1)在命令中使用

echo "test sed" | sed ‘s/sed/SED/’

(2)在命令行中使用多个命令

echo "test sed" | sed -e ‘s/test/Test/; s/sed/SED/’

不同命令间用;分割,;后面保留一个空格,处理命令使用单引号’包围,同时使用-e命令选项说明要执行多条命令。

(3)从文件读取命令

sed -f script_file data_file

使用-f命令选项说明要执行的命令来自文件,script_file表示脚本保存的文件,data_file表示数据保存的文件。

13.2.3 常用命令

(1)替换标记

s/pattern/replacement/flags

flags有4种:数字(表示替换的位置)、g(表示全部)、p(表示打印原始行)、w file(将替换结果写入文件),默认情况下(不设置flags)替换第一个。

(2)使用地址

address command

sed ‘2s/dog/cat/’ data,表示替换第二行

sed ‘2,3/dog/cat/’ data,表示替换第二、三行

sed ‘2,$/dog/cat/’ data,表示替换第二行及之后的全部行

(3)使用文本模式筛选器

/pattern/command

sed ‘/pattern/s/bash/csh/’ data,表示替换包含pattern的行,可以使用正则表达式

(4)删除行

删除行并不会真的删除,仅从sed编辑器输出中删除。

sed ‘d’ data,删除全部行

sed ‘2,3d’ data,删除第2、3行

sed ‘/pattern/d’ data,删除匹配pattern的行

(5)插入、附加和更改

sed ‘address command’ data

插入:i,在指定行前插入

附加:a,在指定行后附加

更改:c,替换指定行内容

(6)变换命令

y,替换指定字符

sed ‘y/123/789/’ data,将data中的1->7,2->8,3->9

(7)打印

打印行,sed ‘p’

打印匹配行,sed -n ‘/pattern/p’ data

打印行号,sed ‘=’ data

列出行,将不可打印的ASCII字符使用八进制表示,sed -n ‘l’

(8)文件读写

写文件:sed ‘1,2w test’ data

读文件:sed ‘3r data2’ data,sed编辑器在该地址之后插入文件中的文本

13.3 高级sed编程

13.3.1 多行命令

(1)next命令

单行next命令(n),sed ‘/header/{n; d}’ data,删除包含header行的下一行

多行next命令(N),将header行和下一行合并,虽然仍包含换行符,但是sed表及其将它们作为一个文本行处理。

(2)多行删除命令

单行删除命令(d),sed ‘N; /System\nAdministrator/d’ data,删除模式空间中的两行。

多行删除命令(D),sed ‘N; /System\nAdministrator/D’ data,只删除第一行,删除直到换行符的所有字符。

(3)多行打印命令

单行打印命令(p),sed ‘N; /System\nAdministrator/p’ data,打印模式空间中的两行。

多行删除命令(P),sed ‘N; /System\nAdministrator/P’ data,只打印第一行。

13.3.2 保留空间

sed编辑的空间是模式空间,还存在保留空间的缓冲区,可用于在模式空间中存在其他行时暂时保存问本行。

命令描述h将模式空间复制到保留空间H将模式空间追加到保留空间g将保留空间复制到模式空间G将保留空间追加到模式空间x将模式空间和保留空间的内容交换

13.3.3 否定命令

13.3.4 更改命令流

临行之前,面对太多的疑问和不解:为何是一个人?

Linux Shell基础知识13 sed编辑器

相关文章:

你感兴趣的文章:

标签云: