shell之sed

语法

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.

你可能感兴趣的:(shell之sed)