sed

来源:互联网 发布:windows安装无法继续 编辑:程序博客网 时间:2024/06/01 10:29

一 文本替换

sed(string editor):用来以批处理的方式而不是交互的方式来编辑文件。


(1)sed应用于以下三种场合

*编辑相对交互式文本编辑器而言太大的文件。

*编辑命令太复杂,在交互式文本编辑器中难以输入的情况。

*对文件扫描一遍,但需要执行多个编辑函数的情况。


(2)sed的运作

命令行上的每个文件名会依次打开与读取。如果没有文件,则使用标准输入,文件名“-”(单个破折号)可用于表示标准输入。

sed读取每个文件,一次读一行,将读取的行放到内存的一个区域——称为模式空间,所有编辑上的操作都会应用到模式空间的内容,当所有操作完成后,sed会将模式空间的最后内容打印到标准输出,再回到开始处,读取另一个输入行。

sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件。因此,如果需要保存改动内容,需要将输出重定向到另外一个文件。命令如下:sed   'sed命令'  input-file > result-file。


(3)调用sed的三种方式:

1. shell命令方式:在shell命令行中输入命令调用sed

格式:sed [选项]  'sed命令' 输入文件


2. 将sed命令插入脚本文件后,然后通过sed命令调用它。

格式:sed [选项] -f sed脚本文件 输入文件


3. 将sed命令插入脚本文件后,最常用方法设置该脚本文件为可执行,然后直接执行该脚本文件。

格式:./sed脚本文件 输入文件

第3种脚本文件必须以#!开头,#!后面是解析这个脚本文件的程序名。


(4)sed常用选项:

*-n:修改了sed到默认打印行为。不打印所有行到标准输出,而是显示以p指定的行。

例如:

sed -n '2,6p' input //显示第2到6行的内容。

sed -n '/test/p' input //显示匹配test关键字的行。


*-e:表示下一个字符串解析为sed的编辑命令,如果只传递一个编辑命令给sed,-e可以省略。

sed不支持同时带多个编辑命令的用法,带多个编辑命令sed的一般格式为:

sed [选项] -e 编辑命令1  -e 编辑命令2  -e 编辑命令3 输入文件

也可以使用分号“;”来实现sed的多编辑命令,格式如下:

sed '编辑命令1;编辑命令2;编辑命令3;......' 输入文件


*-f:表示正在调用sed脚本文件。自脚本文件中读取编辑命令,当有多个命令需应用时,此选项相当有用。

*-i:将替换结果应用于原文件。


二 sed的基本编辑命令:

(1)插入文本和追加文本

*插入文本

在匹配行的前面插入,sed编辑命令的插入文本符号为i\,插入文本格式为

sed '指定地址 i\text' 输入文件

例如:也可以在指定行插入文本,sed 2i\ text 输入文件

*追加文本

sed的编辑命令a\符号用于追加文本,它可以将指定文本的一行或多行添加到指定行的后面。如果不指定追加行,默认放置到每一行后面,追加文本的格式为:

sed '指定地址 a\text' 输入文件

 

(2)修改文本

修改文本是指将所匹配的文本行利用新文本替换,sed编辑命令的修改文本符号位c\,修改文本的格式为

sed '指定地址 c\text' 输入文件


(3)删除文本

sed删除文本命令可以将指定行货指定行范围进行删除,sed编辑命令的删除文本符号为d,删除文本的格式为:

sed 指定地址 d file

例如:sed '1d' file //删除第一行文本

   sed '$d' file //删除最后一行文本

   sed '2,4 d'  file  //删除2~4行

   sed '/^$/d' file //删除空白行


(4)替换文本(包括删除)

sed替换文本的操作将匹配的文本行利用新文本替换,替换文本与修改文本的区别:替换文本可以替换一个字符串,而修改文本是对整行进行修改。

替换文本符号为s,替换文本的格式为

s/被替换的字符串/新的字符串/[替换选项]

s表示sed执行替换操作,sed命令首先匹配被替换的字符串,匹配成功后用新字符串替换它。

例如:sed 's/^ *//' txt:删除开头的空格。

 

*替换选项


g:表示替换文本中所有出现被替换字符串之处。//默认情况下,如果在一行中,被替换字符串出现多次只会被替换一次,加上g,那么一行中的所有被替换字符串都会被替换。例如:sed #include<*.h> | sed 's/[<>]/"/g'。

p:结合-n使用,只打印替换行。

w 文件名:表示输出定向到一个文件。


默认情况下,sed s命令将替换后的全部文本都输出,如果要求只打印替换行,需要结合使用-n和p选项,格式如下:

sed -n 's/被替换的字符串/新的字符串/p' 输入文本。




原创粉丝点击