语法
sed [-n] 'editing command' [file ... ]
sed [-n] -e 'editing command' ... [file ... ]
sed [-n] -f script-file ... [file ... ]
用途
为了编辑它的输入流,将结果生成到标准输出,而非以交互式编辑器的方式来编辑文件。
虽然sed的命令很多,能做很多复杂的工作,但它最常用的还是处理输入流的文本替换,通常是作为管道的一部分。
主要选项
-e 'editing command'
将editing command使用在输入数据上。当有多个命令需应用时,就必须使用-e了。
-f script-file
自script-file中读取编辑命令。当有多个命令需要执行时,此选项相当有用。
-n
不是每个最后已修改结果行都正常打印,而是显示以p指定(处理过的)行
行为模式
读取每个输入文件的每一行,假如没有文件的话,则是标准输入。以每一行来说,sed会执行每一个应用到输入行的editing command。
结果会写到标准输出(默认状态下,或是显示的使用p命令及-n选项)。若无-e或-f选项,则sed会把第一个参数看作时要使用的editing command。
示例
sed可以用任意字符作为定界符,'/'是最常用的定界符
将/home/tolstoy目录结构建立一份副本仔/home/lt下
find /home/tolstoy -type d -print | 寻找所有目录
sed 's;/home/tolstoy/;/home/lt/; | 修改名称;注意:这里使用分号作为定界符
sed 's/^/mkdir /' | 插入mkdir命令
sh -x 以shell跟踪模式执行
后向引用的用法
echo /home/tolstoy/ | sed 's;\(/home\)/tolstoy/;\1/lt;'
/home/lt
sed将\1替代为匹配于正则表达式的/home部分。任何正则表达式都可放在\(与\)之间,且后向引用最多可以用到9个。
&在替代文本里表示的意思是“从此点开始替代成匹配于正则表达式的整个文本”。
echo Atlanta is a city | sed 's/Atlanta/&, the Capital of the South/'
Atlanta, the Capital of the South is a city
如果要在替代文本里使用&字符的字面意义,请使用'\'转义它。
全局替换
echo Tolstoy reads well. Tolstoy writes well. | sed 's/Tolstoy/Camus/' 没有设置g
Camus reads well. Tolstoy writes well.
echo Tolstoy reads well. Tolstoy writes well. | sed 's/Tolstoy/Camus/g' 设置了g
Camus reads well. Camus writes well.
还可以在结尾指定数字,指示第n个匹配出现才替换
echo Tolstoy reads well. Tolstoy writes well. | sed 's/Tolstoy/Camus/2'
Tolstoy reads well. Camus writes well.