sed
一、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