sed是一个非交互式文本编辑器。它编辑文件或者从标准输入导出的文本拷贝。
不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件, sed从标准输入中接受输入,一般是键盘或重定向结果。
命令行格式:实际命令用单引号(‘’)或者双引号(“”)引起来
sed [option] command input-files
使用sed脚本:
sed [option] -f sed_script input-files
使用第一行有sed解释器的脚本:
sed_script [option] input-files
sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本: 1) 使用行号,可以是一个简单数字,或是一个行号范围。 2 ) 使用正则表达式。
要附加文本,使用符号a \,可以将指定文本一行或多行附加到指定行。。如果不指定文本放置位置, sed缺省放在每一行后面。附加文本时不能指定范围,只允许一个地址模式。文本附加操作时,结果输出在标准输出上。注意它不能被编辑,因为sed执行时,首先将文件的一行文本拷贝至缓冲区,在这里sed编辑命令执行所有操作(不是在初始文件上),因为文本直接输出到标准输出,sed并无拷贝。
要在附加操作后编辑文本,必须保存文件,然后运行另一个sed命令编辑它。这时文件的内容又被移至缓冲区。
1、附加操作格式如下:地址指定一个模式或行号,定位新文本附加位置。a\ 通知sed对a \后的文本进行实际附加操作。观察格式,注意每一行后面有一斜划线,这个斜划线代表换行。sed执行到这儿,将创建一新行,然后插入下一文本行。最后一行不加斜划线, sed假定这是附加命令结尾。
输出显示附加结果。如果要保存输出,重定向到一个文件。
[address]a\ text\ text\ ... textsed /company/a\ Then\ suddenly\ it\ happend. quote.txt > new_quote.txt
2、插入文本:插入命令类似于附加命令,只是在指定行前面插入。和附加命令一样,它也只接受一个地址。下面是插入命令的一般格式。地址是匹配模式或行号。
也可以使用行号指定文本插入位置,插入位置在模式或指定行号4之前。
sed ‘4’i\ Then\ suddenly\ it\ happend. quote.txt
修改命令将在匹配模式空间的指定行用新文本加以替代。格式如下:
[address[,address]]c\ text\ text\ ... text替换某一行(第三行):
sed '3'c\ The\ Office\ Dibble\ band\ played\ well. quote.txt可以对同一个脚本中的相同文件进行修改、附加、插入三种动作匹配和混合操作。
#!/bin/sed -f #This is a command line,all command starts with a # #name: mix.sed #change first line 1 c\ The Dibble band were grooving. #let's now insert one line /evening/ i\ They play some great tunes. #change the last line $ c\ That's all.Thank you! #stick in a new line 3 a\ Where was the nurse to help?sed删除文本格式,其中地址可以是行的范围或模式:
[address[,address]] d
sed '1d' quote.txt sed '1,3d' quote.txt sed '$d' quote.txt sed '/Jerry/d' quote.txt替换命令用替换模式替换指定模式:
[address[,address]] s/old_pattern/new_pattern/ [g p w n]
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现的模式。 p 缺省sed将所有被替换行写入标准输出,加p选项将使-n选项无效,-n选项不打印输出结果。 w 文件名 使用此选项将输出定向到一个文件例如
//修改文本,源文件不变,如果要修改源文件,使用-i选项 sed 's/night/NIGHT/' quote.txt sed -i 's/night/NIGHT/' quote.txt // 删除特殊符号,注意转义 sed 's/\$//' quote.txt // 全局替换 sed 's/The/WOW!/g' quote.txt // 使用w选项,注意将输出文件名包含在单引号里。 sed 's/splendid/SPLENDID/w sed.out' quote.txt如果要附加或修改一个字符串,可以使用(&)命令,&命令保存发现模式以便重新调用它,然后把它放在替换字符串里面。说白了&就代表着要被替换的文本。
sed -n 's/nurse/"Hello" &/p' quote.txt[address[,address]]w filename
sed '1,2 w filedt' quote.txt sed '/Neave/ w file' quote.txt处理文件时, sed允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在模式匹配行后,格式为:
address r filename
//将文件sed.txt加入到quote.txt文本的company后面,并打印到标准输出,不改变源文件。 sed '/company/ r sed.txt' quote.txt查询首次出现模式,然后退出。需要将q放在sed语句末尾。
sed '/jerry/q' quote.txtsed格式为,l 意为列表:
[address[,address]]l
sed -n '1,$l' func.txt