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' 输入文本。