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
原文:http://alca0126.blog.51cto.com/7826974/1361857