首页 > 其他 > 详细

sed

时间:2014-02-22 17:44:27      阅读:289      评论:0      收藏:0      [点我收藏+]

sed

sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可
能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。

可以在命令行输入sed命令,也可以在一个文件中写入命令,然后调用sed,这与awk基本
相同。使用sed需要记住的一个重要事实是,无论命令是什么, sed并不与初始化文件打交道,
它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
因为sed是一个非交互性编辑器,必须通过行号或正则表达式指定要改变的文本行。


调用sed有三种方式:在命令行键入命令;将sed命令插入脚本文件,然后调用sed;将sed
命令插入脚本文件,并使sed脚本可执行。

使用sed命令行格式为:
sed [选项] sed命令输入文件。
记住在命令行使用sed命令时,实际命令要加单引号。sed也允许加双引号。

使用sed脚本文件,格式为:
sed [选项] -f sed脚本文件输入文件
要使用第一行具有sed命令解释器的sed脚本文件,其格式为:

sed脚本文件[选项] 输入文件
不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中
接受输入,一般是键盘或重定向结果



sed选项:
n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条sed命令,
此选项无用,但指定它也没有关系。
f 如果正在调用sed脚本文件,使用此选项。此选项通知sed一个脚本文件支持所有的sed命令,例如:sed -f myscript.sed input_file,这里myscript.sed即为支持sed命令的文件。


保存sed输出
由于不接触初始化文件,如果想要保存改动内容,简单地将所有输出重定向到一个文件即可.

sed ‘command’inputfile > myoutfile



sed [-nefr]

-n 使用安静模式silent 在一般sed的用法中,所有来自STDIN的数据都会被列在屏幕上,但-n 只显示经过sed特殊处理的那一行 才会被列出来

-e 直接在命令行模式进行sed的编辑

-f 直接将sed的动作写在一个文件里,-f filename 则可以执行filename里的sed动作

-r sed的动作支持的是扩展型正则表达式语法

-i 直接修改读取的文件内容 而不是输出屏幕



使用sed在文件中查询文本的方式

1:使用行号,可以是一个简单数字,或是一个行号范围。
2:使用正则表达式

x   x为一行号,如1
x,y 表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/ 查询包含模式的行。例如/disk/或/[a-z]/

/pattern/pattern/ 查询包含两个模式的行。例如/disk/disk/
pattern/,x   在给定行号上查询包含模式的行。如/ribbon/,3
x,/pattern/  通过行号和模式查询匹配行。3./vdu/
x,y! 查询不包含指定行号x和y的行。1,2!


基本sed编辑命令

p 打印匹配行
= 显示文件行号
a \ 在定位行号后附加新文本信息 下一行
i \ 在定位行号后插入新文本信息 上一行
d 删除定位行
c \ 用新文本替换定位文本

s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制ASCII代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句



以lianxi.txt为例子:

lianxi.txt
The honetsuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too Bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance


使用p显示行

sed ‘2p‘ lianxi.txt

原意只打印第二行,但是却打印了文件中所有行,为此需使用- n选项,显示打印定位(匹配)行。

sed -n ‘2p‘ lianxi.txt

打印范围
可以指定行的范围,现打印1到3行,用逗号分隔行号。

sed -n ‘1,3p‘ lianxi.txt
打印模式
假定要匹配单词disco,并打印此行,方法如下。使用模式/pattern/格式,这里为/disco/。

sed -n ‘/disco/‘p lianxi.txt
使用模式和行号进行查询

使用模式与行号的混合方式可以剔除第一行,格式为linenumber,/pattern/。逗号用来分
隔行号与模式开始部分。为达到预期结果,使用4,/The/。意即只在第四行查询模式the.

sed -n ‘4,/The/p‘ lianxi.txt

匹配元字符
匹配元字符$前,必须使用反斜线\屏蔽其特殊含义。模式为/\$/p。

sed -n ‘/\$/p‘ lianxi.txt
显示整个文件
要打印整个文件,只需将行范围设为第一行到最后一行1,$。 $意为最后一行。

sed -n ‘1,$‘p lianxi.txt

任意字符
匹配任意字母,后跟任意字母的0次或多次重复,并以ing结尾,模式为/.*ing/。可以使用这个模式查询以ing结尾的任意单词。

sed -n ‘/.*ing/‘ lianxi.txt

首行和末行

sed -n ‘1p‘ lianxi.txt   |    sed -n ‘$p‘ lianxi.txt

打印行号
要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/=。

sed -n ‘/music/=‘ lianxi.txt
整个文件都打印出来,并且匹配行打印了行号。如果只关心实际行号,使用-e选项。

sed -e ‘/music/=‘ lianxi.txt

如果只打印行号及匹配行,必须使用两个sed命令,并使用e选项。第一个命令打印模式
匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=。

sed -n -e ‘/music/‘p -e ‘/music/=‘ lianxi.txt

附加文本
要附加文本,使用符号a\,可以将指定文本一行或多行附加到指定行。 多行插入后边加上 \

sed -i ‘/company/ a\ Then suddenly it happened‘ lianxi.txt

插入文本 在第4行下边插入 alca.lai

sed -i ‘4 i\ alca.lai ‘ lianxi.txt

替换文本 将alca.lai 替换成Kalpana  

sed -i ‘/alca.lai/ c\ Kalpana‘ lianxi.txt

也可以使用行号直接代替:sed -i ‘3 c\ Kalpana‘ lianxi.txt

删除文本

sed -i ‘/kalpana/‘d lianxi.txt














本文出自 “岁月丶倾城” 博客,请务必保留此出处http://alca0126.blog.51cto.com/7826974/1361857

sed

原文:http://alca0126.blog.51cto.com/7826974/1361857

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!