sed是一个非交互式的文本编辑器,可以对文本文件和标准输入进行编辑
标准输入可以来自键盘,文件重定向,字符串,变量,管道的文本。
sed从文本行或者标准输入中读取数据,将其复制到缓冲区,然后读取命令行或者脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或者脚本中的所有命令都执行完毕。
sed只是对缓冲区原始文件的副本进行编辑,并不编辑原始的文件,因此,如果需要保存原始的内容,需要将输出重定向到另一个文件,使用如下的命令:sed 'sed命令' inputfile > outputfile。sed的w选项也可以将结果保存到某个文件中
有三种调用sed的方式
1.在shell命令行中输入命令调用sed
sed [选项] 'sed命令' inputfile 注意:需要用单引号将sed命令引起来
2.将sed命令插入到脚本文件中,然后通过sed命令调用它。
sed [选项] -f sed脚本文件 inputfile
3.将sed命令插入到脚本文件后,将此脚本文件设置为可执行,然后执行该脚本文件。这种情况的脚本文件需要以#!符号开头,后面是解析这个脚本的程序名。
./sed脚本文件 inputfile
不管是哪一个调用,如果没有指定输入文件,sed将从标准输入中接受输入
sed选项:
1. -n 不打印所有的行到标准输出
2. -e 表示将下一个字符串解释为sed编辑命令,如果只传递一个编辑命令给sed,则-e选项可以忽略
3. -f 表示正在调用sed脚本文件
sed命令由定位文本行和sed编辑命令组成,sed编辑命令对定位文本行进行各种处理
定位文本的方法:
x x为指定行号
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 -n '3,6p' inputfile
sed -n '/suda/p' inputfile sed对大小写也是敏感的
sed -n -e '/suda/p' -e '/suda/=' inpufile sed不支持同时带有多个命令,如sed -n '/suda/p=' inputfile
带有多个编辑命令的sed一般格式
sed [选项] -e 命令1 -e 命令2 -e 命令3 ..... -e 命令n inputfile
追加文本一般格式 sed [选项] '指定地址a\text' inputfile
指定地址以匹配模式/pattern/或者行号的形式给出,用于定位新文本的追加位置,text是要追加的文本,将text追加到匹配行的后面
如果不指定文本追加位置,sed默认放置到每一行的后面。
sed脚本文件的编写:文件名append.sed
cat append.sed
#!/bin/sed -f
/pattern/a\we add a new line\
we add another line
chmod 777 append.sed
./append.sed inputfile
注意:
1.$在正则表达式中匹配行尾,但是在sed命令中表示最后一行。
2.sed基本编辑命令可以放在''内,也可以放在''外。 如sed -n '$p' inputfile sed -n '$'p inputfile
插入文本的一般格式
sed [选项] '指定地址i\text' inputfile 将text插入到匹配行的前面
修改文本的一般格式
sed [选项] '指定地址c\text' inputfile 用text替换匹配到的文本行
删除文本的一般格式
sed [选项] '指定地址d' inputfile 将匹配的行或者行范围删除
替换文本的一般格式
sed [选项] 's/被替换的字符串/新字符串/[替换选项]' inputfile
替换文本可以替换一个字符串,修改文本是对整行进行替换,替换文本更加灵活
sed首先匹配被替换的字符串,匹配成功后,用新字符串替换它,选项做进一步的细化
选项有如下的:
g 表示替换文本中所有出现被替换字符的地方。不加g选项,当出现文本行中某一行有两个以上匹配的字符串时只会替换第一个
p 与-n 选项结合,只打印替换行
w 文件名 表示将输出定向到一个文件
sed替换文本命令还可以指定替换第几次匹配到的字符串,命令如下
sed [选项] 's/被替换的字符串/新字符串/3p' 表示替换第三次匹配到的字符串,数字范围在1-512之间
&符号用来保存被替换的字符串以供调用,举例如下:
sed -n 's/old/(&)/pg' inputfile
sed -n 's/old/(old)/pg' inputfile 这里&=old,用(old)替换old
写入一个新文件的一般格式
sed [选项] '指定地址 w 文件名' inputfile
从文件中读入文本的一般格式
sed [选项] '指定地址 r 文件名' inputfile
sed命令从文件名对应的文件中读取文本,并附加在匹配的行后面
退出命令
sed [选项] '指定地址 q' inputfile
表示完成首次的相应匹配后就立即退出
变换命令的一般格式
sed [选项] 'y/被变换的字符序列/变换的字符序列/' inputfile
对字符逐个进行替换
显示控制字符
sed -n '1,$l' inputfile
显示第一行到最后一行之间所有的控制字符
在定位行执行命令组的一般格式
sed [选项] '/pattern/{sed编辑命令1;sed编辑命令2;.......sed编辑命令n;}' inputfile
此命令等同于使用选项-e的sed命令,实质是执行多个命令。
利用分号进行多个编辑命令
sed [选项] 'sed编辑命令1;sed编辑命令2......' inputfile
n h H g G命令不常用,这里暂不做介绍。
阅读(1592) | 评论(0) | 转发(0) |