Techyou labs
真正的爱应该超越生命的长度、心灵的宽度、 灵魂的深度
常用标签
您正在查看:标签 shell 下的文章
July 24, 2010

sed用法
1. 是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。
2. 通过行号或正则表达式指定要改变的文本行
3. sed不与初始文件打交道,而只与它的一个拷贝打交道,如果操作结果没有重定向到一个文件,那么将输出到屏幕。
调用方式:
a. 命令行方式
b. 将sed命令插入脚本文件中,然后调用sed
c. 将sed命令插入脚本文件中,使得脚本文件为可执行。
保存sed输出
重定向到一个新文件 >
sed中定位文本的方式
x 一行号
x,y 行号范围
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
/pattern/,x 在指定行号上查询匹配模式的行
x,/pattern/ 通过行号和模式查询匹配行
x,y! 查询不包含行号x,y的行
sed编辑命令
p 打印文本
匹配元字符$前,必须使用反斜线\
= 打印行号 使用-e选项
如果既打印行号又打印匹配行,必须使用两个sed命令,并使用-e选项
附加文本
使用符号a\ ,可以指定文本一行或多行附加到指定行。若不指定文本放置位置位置,sed缺省放置在每一行后面。
创建sed脚本文件
创建脚本文件,第一行为:
#!/bin/sed -f ----注 说明sed命令解释行。脚本在这一行查找sed以运行命令,这里定位在/bin
插入文本:在指定行前面插入,它也只接受一个地址。
删除文本:d
替换命令用替换模式替换指定模式
使用sed实现的一个重要功能是在另一个系统中下载的文件中剔除控制字符。
1. 使用s/-*//g删除横线-----
2. 使用/^$s/d删除空行
3. 使用$d删除最后一行
4. 使用1d删除第一行
5. 使用awk{print $1}打印第一列

在这篇文章中,我们将浏览最常用的命令和选项,并演示它们如何工作,以及它们适于在何处使用。

替换命令

sed 实用工具以及其它任何类似的编辑器的最常用的命令之一是用一个值替换另一个值。用来实现这一目的的操作的命令部分语法是:

's/{old value}/{new value}/'

因而,下面演示了如何非常简单地将 "tiger" 修改为 "wolf":

$ echo The tiger cubs will meet on Tuesday after school | sed
's/tiger/wolf/'
The wolf cubs will meet on Tuesday after school
$

注意如果输入是源自之前的命令输出,则不需要指定文件名—同样的原则也适用于 awk、sort 和其它大多数 LinuxUNIX 命令行实用工具程序。

多次修改

如果需要对同一文件或行作多次修改,可以有三种方法来实现它。第一种是使用 "-e" 选项,它通知程序使用了多条编辑命令。例如:

$ echo The tiger cubs will meet on Tuesday after school | sed -e '
s/tiger/wolf/' -e 's/after/before/'
The wolf cubs will meet on Tuesday before school
$

这是实现它的非常复杂的方法,因此 "-e" 选项不常被大范围使用。更好的方法是用分号来分隔命令:

$ echo The tiger cubs will meet on Tuesday after school | sed '
s/tiger/wolf/; s/after/before/'
The wolf cubs will meet on Tuesday before school
$

注意分号必须是紧跟斜线之后的下一个字符。如果两者之间有一个空格,操作将不能成功完成,并返回一条错误消息。这两种方法都很好,但许多管理员更喜欢另一种方法。要注意的一个关键问题是,两个撇号 (' ') 之间的全部内容都被解释为 sed 命令。直到您输入了第二个撇号,读入这些命令的 shell 程序才会认为您完成了输入。这意味着可以在多行上输入命令—同时 Linux 将提示符从 PS1 变为一个延续提示符(通常为 ">")—直到输入了第二个撇号。一旦输入了第二个撇号,并且按下了 Enter 键,则处理就进行并产生相同的结果,如下所示:

$ echo The tiger cubs will meet on Tuesday after school | sed '
> s/tiger/wolf/
> s/after/before/'
The wolf cubs will meet on Tuesday before school
$

全局修改