sed命令基本操作

sed命令

sed是一个非交互式文本编辑器。它编辑文件或者从标准输入导出的文本拷贝。

调用sed

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

方式1

命令行格式:实际命令用单引号(‘’)或者双引号(“”)引起来

sed [option] command input-files

方式2

使用sed脚本:

sed [option] -f sed_script input-files

方式3

使用第一行有sed解释器的脚本:

sed_script [option] input-files

sed在文件中查找文本的方式

sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
1) 使用行号,可以是一个简单数字,或是一个行号范围。
2 ) 使用正则表达式。
这里写图片描述

基本sed编辑命令

这里写图片描述
这里写图片描述

例子

使用p(rint)显示行
// 只打印第二行
sed -n '2p' quote.txt
// 打印范围
sed -n '1,3p' quote.txt 
// 打印模式,匹配单词并打印此行
sed -n '/music/'p quote.txt
// 使用行号和模式进行查询
sed -n '4,/The/'p quote.txt
// 使用\屏蔽特殊含义以匹配元字符
sed -n '/\$/'p quote.txt
// 打印整个文件,以下两条命令好像并没有什么区别
sed -n '1,$p' quote.txt
sed -n '1,$'p quote.txt
// 匹配任意字符
sed -n '/.*ing/'p quote.txt
// 打印首行
sed -n '1p' quote.txt
// 最后一行
sed -n '$p' quote.txt
// 打印行号,使用等号 =,打印模式匹配的行号,使用格式/pattern/=,其中-n只显示行号,-e显示行号和整行内容。
sed -n '/music/=' quote.txt
sed -e '=' quote.txt
// 如果只打印匹配行和行号,使用模式 sed -n -e '/pattern/p' -e '/pattern/=' input-files
sed -n -e  '/music/p'  -e '/music/=' quote.txt
附加文本

要附加文本,使用符号a \,可以将指定文本一行或多行附加到指定行。。如果不指定文本放置位置, sed缺省放在每一行后面。附加文本时不能指定范围,只允许一个地址模式。文本附加操作时,结果输出在标准输出上。注意它不能被编辑,因为sed执行时,首先将文件的一行文本拷贝至缓冲区,在这里sed编辑命令执行所有操作(不是在初始文件上),因为文本直接输出到标准输出,sed并无拷贝。

要在附加操作后编辑文本,必须保存文件,然后运行另一个sed命令编辑它。这时文件的内容又被移至缓冲区。

1、附加操作格式如下:地址指定一个模式或行号,定位新文本附加位置。a\ 通知sed对a \后的文本进行实际附加操作。观察格式,注意每一行后面有一斜划线,这个斜划线代表换行。sed执行到这儿,将创建一新行,然后插入下一文本行。最后一行不加斜划线, sed假定这是附加命令结尾。

输出显示附加结果。如果要保存输出,重定向到一个文件。

[address]a\
text\
text\
...
text

sed /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
将sed结果写入文件命令

[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.txt
显示文件中的控制字符

sed格式为,l 意为列表:

[address[,address]]l

sed -n '1,$l' func.txt

猜你喜欢

转载自blog.csdn.net/immeatea_aun/article/details/79332334