sed编辑器不提供交互使用方式:只能在命令行输入编辑命令、指定文件名,然后屏幕上擦看输出;并且sed没有破坏性,它不会修改文件,除非用shell重定向来保存输出结果,默认情况下所有输出都是输出到屏幕的,所以sed又被称为流编辑器。
注意:1. sed中凡是可能被shell解释的字符都必须加引号进行保护。
2. sed是以行为单位处理文本的。
格式:sed 参数 ‘command’ filename(s) eg: sed '1,3p' file1 打印file1的第一到第三行
参数:可有可无
常用参数:
-e 多项编辑 sed -e ‘1,3p’ -e ‘4,5p’ file1;
-f 指定sed脚本文件名。sed脚本也就是command的集合
sed -f output.sed file1
-n 取消缺省的输出。sed是默认输出所有行的。取消后,可有命令p来控制输出某一行
command:
包含两个模块:定址命令和处理命令。
1.定址命令:
可不出现,表示默认处理所有行。
形式可以是数字、正则表达式或者两者的组合。
比如: 1,3 表示第一行到地三行 。
/^[a-Z]/ 表示以小写字母开头的行。
3,/^[a-z]/ 表示第三行到以小写字母开头的行。
2.处理命令:告诉sed对行进行什么处理,包括打印删除修改等。紧跟在定址命令后面。
比如:sed 3,/^[a-z]/p file1 打印文件file1的第三行到以小写字母开头的行。
常用的命令有:
a 在当前行后面添加一行或者多行
sed '$i the end' file1 #添加’the end‘到文件尾,其他行正常输出
i 在当前行前面添加一行或者多行
sed ‘1i the start‘ file1 #添加’the start‘ 到文件头,其他行正常输出
d 删除行
sed ‘1,^[a-z]d' file1 删除第一行到以小写字母开头的所有行,其他正常输出
p 打印行
sed ‘20,30p' file1 再次输出第20行到第30行,其他正常输出
r 读文件,并输出到屏幕
sed ‘/hello/r file2’ file1 #遇到包含hello的行时,在该行下面输出file2的内容
w 写入文件。
sed ‘/hello/w file2‘ file1 # 把包含hello的行写入到file2中
s 替换字符串。格式为 s/被替换字符串/替换字符串/替换标志
被替换字符串可用正则表达式来选择,但是替换字符串则不可。
替换标志:表示替换后的操作,可多个操作。
g 在匹配行内全局替换。如果没有,则只替换匹配到的第一个字符串
p 替换完后输出该行
w 把替换完的该行写入文件
sed ‘s/^[a-z]* /hello/p' file1 #把以小写字母开头的第一个字段替换成hello并输出