sed命令的格式
sed [-options] [command] [stdin]
在命令行上执行时需加参数-e,在档案内执行时需加参数-f(对应的[command]为sed脚本时)
指定sed的作用范围
- sed -e '1d' myfile
- sed -e '1,10d' myfile
- sed -e '/begin/,/end/p' myfile
注解:1。删除myfile文件中的第一行
2。删除myfile的第一行到第十行
3。打印myfile中begin到end之间的内容
也可以多个command在一条sed中使用
- sed -e '1,10d' -e 's/good/bad/g' myfile
删除1至10行,并将myfile中的good全部替换成bad
sed中的正则表达式
这里通过几个案例来说明,详细的正则表达式自行查阅。
- sed -n -e '/main[[:space:]]*(/,/^}/p' mydir/*.c
-n选项表示默认不打印
*表示将与前一个字符的零或多个出现匹配
[[:space:]]*匹配零个或者多个空格
^}以}结尾的
所以上述命令表示,搜索mydir文件夹下以.c结尾的文件中main(和}之间的内容并打印。
假设myfile.txt文件中为如下内容:
- <b>This</b> is what <b>I</b> meant.
若想让myfile.txt输出为如下内容
- sed -e 's/<[^>]*>//g' myfile.txt
[^>]* 匹配零个或者多个不包含>的字符
则命令表示搜索myfile.txt中包含<...>的字符并全部删除,其中<...>中不包含>字符
- sed -e 's/.*/# &/' myfile
.*匹配零个或多个字符,这里表示非空行
&在行首插入字符,/#&/在行首插入#
则命令表示将myfile中所有非空行行首添加#
组合使用
创建复杂的sed命令,需要输入多个command时,有很多方法可以实现。
首先可以在命令之间加分号,如下命令,'='命令告诉sed打印行号,'p'命令告诉sed打印该行
无论什么时候指定了两个或更多命令,都按顺序将每个命令应用到文件的每一行。虽然分号很方便,但是在某些场合下,它不能正常工作。另一种替换方法是使用两个 -e 选项来指定两个不同的命令: - sed -n -e '=' -e 'p' myfile
对于复杂的多行脚本,最好的方法是将命令放入一个单独的文件中。然后,用 -f 选项引用该脚本文件:
- sed -n -f mycommand.sed myfile
阅读(1509) | 评论(0) | 转发(0) |