sed

2016-05-05  本文已影响0人  溺水的漂流瓶

一、sed命令基本用法

sed只是对缓冲区中原始文件的副本进行编辑,并不是编辑原始的文件。

如果需要保存sed改动的内容,有两种方式:

(1)将输出重定向到另一个文件

(2)使用sed编辑命令中的w选项

调用sed有三种方式,命令格式如下:

(1)在shell命令行输入命令调用sed,格式为:

sed [选项] 'sed命令' 输入文件

注意:需要用单引号将sed命令引起来

(2)将sed命令插入脚本文件后,然后通过sed命令调用它,格式为:

sed [选项] -f sed脚本文件 输入文件

(3)将sed命令插入脚本后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为:

./sed脚本文件 输入文件

注意:sed命令通常由定位文本行和sed编辑命令两部分组成,sed编辑命令对定位文本行进行各种处理。

sed的常用选项:

-n:不打印所有的行到标准输出

-e:表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略

-f:表示正在调用sed脚本文件

sed定位文本的方法:

x:x为指定行号

x,y:指定从x到y的行号范围

/pattern/:查询包含模式的行

/pattern/pattern/:查询包含两个模式的行

/pattern/,x:从与pattern的匹配行到x号行之间的行

x,/pattern/:从x号行到与pattern的匹配行之间的行

x,y!:查询不包括x和y行号的行

sed编辑命令:

p:打印匹配行

=:打印文件行号

a\:在定位行号之后追加文本信息

i\:在定位行号之前插入文本信息

d:删除定位行

c\:用新文本替换定位行

s:使用替换模式替换相应模式

r:从另一个文件中读文本

w:将文本写入到一个文件

y:变换字符

q:第一个模式匹配完成后退出

l:显示与八进制ASCII码等价的控制字符

{}:在定位行执行的命令组

n:读取下一个输入行,用下一个命令行处理新的行

h:将模式缓冲区的文本复制到保持缓冲区

H:将模式缓冲区的文本追加到保持缓冲区

x:互换模式缓冲区和保持缓冲区内容

g:将保持缓冲区的内容复制到模式缓冲区

G:将保持缓冲区的内容追加到模式缓冲区

二、sed命令选项

1、sed命令的-n选项

-n选项表示“不打印”功能是指:不打印sed编辑对象的全部内容。

sed匹配关键字也是大小写敏感的

sed -n '3,6p' input

sed -n '/certificate/p' input

2、sed命令的-e选项

-e选项指定其后面紧跟着的字符串为sed编辑命令

sed不支持同时带多个编辑命令的用法

带多个编辑命令sed的一般格式为:

sed [选项] -e 编辑命令1 -e 编辑命令2 ... -e 编辑命令n 输入文件

sed -n -e '/Certificate/p' -e '/Certificate/=' input

3、sed命令的-f选项

-f选项只有调用sed脚本文件时才起作用

三、sed文本定位

1、匹配元字符

sed -n '/\./p' input      #匹配.符号

2、使用元字符进行匹配

sed基本编辑命令可以放在单引号内,也可放在单引号外。

sed -n '$'p input      #匹配最后一行

3、!符号

!符号表示取反,x,y!表示匹配不在x和y行号范围内的行。

x!表示匹配除了x行号外的所有行,但是!符号不能用于关键字匹配,如无法表示不与/pattern/匹配的行。

sed -n '2,10!p' input

4、使用行号与关键字匹配限定行范围

sed -n '/seugrid/,$p' input      #打印与seugrid的匹配行到最后一行

四、sed基本编辑命令

1、追加文本

sed编辑命令a\符号用于追加文本,它可以将指定文本的一行或多行追加到指定行后面。如果不指定文本追加位置,sed默认放置到每一行后面,追加文本的格式:

sed "指定地址a\text" 输入文件

指定地址以匹配模式/pattern/或行号的形式给出,用于定位新文本的追加位置,sed对a\后的文本进行追加操作。

2、插入文本

插入文本和追加文本类似,区别仅在于追加文本是在匹配行的后面插入,而插入文本是在匹配行的前面插入,sed编辑命令的插入文本符号为i\,插入文本的格式为:

sed '指定地址i\text' 输入文件

3、修改文本

修改文本是指将所匹配的文本行利用新文本行替代,sed编辑命令的修改文本符号为c\,修改文本的格式为:

sed '指定地址c\text' 输入文件

4、删除文本

sed删除文本命令可以将指定行或指定行的范围进行删除,sed编辑命令的删除文本符号为d,删除文本的格式为:

指定地址 d

注意:sed编辑命令中的删除操作符号是d,后面不带“\”符号,与追加、插入、修改等命令有所区别。

sed '$d' input      #删除最后一行文本

5、替换文本

sed替换文本操作将所匹配的文本行利用新文本替换,替换文本与修改文本功能有相似之处,区别在于修改文本是对整行进行修改,替换文本可以替换一个字符串。sed编辑命令的替换文本符号为s,替换文本的格式为:

s/被替换的字符串/新字符串/[替换选项]

sed替换选项:

g:表示替换文本中所有出现被替换字符串之处

p:与-n选项结合,只打印替换行

w文件名:表示将输出定向到一个文件

默认情况下,sed s命令将替换后的全部文本都输出,如果要求只打印替换行,需要结合使用-n和p选项,命令格式如下:

sed -n 's/被替换的字符串/新字符串/p' 输入文件

sed -n '/Certificate/CERTIFICATE/p' input

sed替换命令在默认情况下,即不带g选项时,对某行的第1处匹配关键字进行替换后,就跳转到下面匹配行。而g选项使得sed替换命令对某行的所有关键字都进行替换。

sed替换文本命令还可指定替换第几次匹配的关键字,只需在替换选项加上相应的数字即可,数字范围需要在1~512之间。

sed -n 's/seu/njue/2p' input      #sed替换第3次匹配

w选项后加文件名表示将输出定向到这个文件,如果输出文件未曾建立,sed命令自动建立输出文件,默认目录是当前工作目录。

sed -n 's/seu/njue/w output' input      #将seu字符串改为njue,并将结果写入到ouput文件

&符号可用来保存被替换的字符串以供调用。如果我们需要将seu用圆括号括起来,可用以下两条等价的命令:

sed -n 's/seu/(&)pg' input

sed -n 's/seu/(seu)/pg' input

6、写入一个新文件

sed命令指示对缓冲区中输入文件的复制内容进行编辑,如果要保存编辑结果,需要将编辑后的文本重定向到另一个文件,sed写入文件的符号为w,基本格式为:

指定地址 w 文件名

w的用法与sed替换文本中w选项相似

sed -n '/globus/w output' input      #将匹配globus的行写入文件

7、从文件中读入文本

sed命令还可将其他文件中的文本读入,并附加在指定地址之后,sed读入文件的符号为r,基本格式为:

指定地址 r 文件名

sed '/Certificate/r otherfile' input

8、退出命令

sed命令的q选项表示完成指定地址的匹配后立即退出,基本格式为:

指定地址 q

sed -n '/.r.*/p' input      #查找任意字符后跟r字符,再跟0个或多个任意字符的字符串

9、变换命令

sed命令的y选项表示字符变换,它将一系列的字符变换为相应的字符,sed y命令是对字符的逐个处理,基本格式为:

sed 'y/被变换的字符序列/变换的字符序列/' 输入文件

sed y命令要求被变换的字符序列和变换的字符序列等长,否则sed y命令将报错。

sed 'y/fmj/FMJ/' input      #将fmj三个字符变换为大写

10、显示控制字符

控制字符就是非打印字符,sed l命令可以显示文件中的控制字符,方便用户对控制字符进行处理。

sed -n '1,$l' control

11、在定位行执行命令组

sed编辑命令中的“{}”符号可以指定在定位行上所执行的命令组,它的作用与sed的-e选项类似,都是为了在定位行执行多个编辑命令。

sed -n '/Certificate/{p;=}' input

上一篇下一篇

猜你喜欢

热点阅读