Chinaunix首页 | 论坛 | 博客
  • 博客访问: 606110
  • 博文数量: 150
  • 博客积分: 1132
  • 博客等级: 少尉
  • 技术积分: 2067
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 16:46
文章分类

全部博文(150)

文章存档

2015年(15)

2014年(75)

2013年(4)

2012年(56)

分类: LINUX

2014-06-03 17:21:05

sed 可以分析标准输入(STDIN)的数据,然后将数据经过处理后,再将它输出到标准输出(STDOUT)。它有替换、删除、新增、选取特定行等处理功能。

# sed [-nefr] [动作]
参数:
-n    :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会显示在屏幕上。但如果加上 -n 参数,则只有经过 sed 特殊处理的那一行才会列出来。
-e    :直接在命令行模式上进行 sed 的操作编辑。
-f    :直接将 sed 的操作写在一个文件内,-f filename 则可以执行 filename 内的 sed 操作。
-r    :sed 的操作支持的是扩展的正则表达式语法(默认是基础正则表达式语法)。

操作说明:[n1[,n2]]function
n1, n2: 不一定存在,一般代表“选择进行操作的行数”,举例来说,如果操作需要在10到20行之间进行,则“10,20[操作行为]”。

function 有下面这些操作:
a    :新增,a 的后面可以接字符串,而这些字符串会在新的一行出现(当前的下一行)。
c    :替换,c 的后面可以接字符串,这些字符串可以替换 n1,n2 之间的行。
d    :删除,因为是删除,所以 d 后面通常不接任何内容。
i    :插入,i 的后面可以接字符串,而这些字符串会在新的一行出现(当前的上一行)。
p    :打印,即打印某个选择的数据。通常 p 会与参数 sed -n  一起运行。
s    :搜索,不但可以搜索,还能进行替换。通常 s 操作可以与正则表达式一起使用。例如 1,20s/old/new/g。

注意:
sed 后面接的操作务必以单引号('')括住。

范例:
范例一:显示 /etc/passwd 的内容,并且需要打印行号,同时,将第2~5行删除。
[root@linux ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin/:/sbin/shutdown
....(后面省略)....
# 因为 2~5 行删除了,所以显示的数据中就没有 2~5 行。
#另外,注意一下,原本应该是要执行 sed -e 才对,没有 -e 也行。
#同时要注意,sed 后面接的操作,请务必以('')两个单引号括住。
# 如果只要删除第2行,可以使用 nl /etc/passwd | sed '2d' 来实现。
#第3行到最后一行,则是 nl /etc/passwd | sed '3,$d'

范例二:接上题,在第二行后(即是加上第三行)加上“drink tea?”字样。
[root@linux ~] # nl /etc/passwd | sed '2a drink tea'
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 在 a 后面加上的字符串已出现在第二行后面。如果要在第二行前呢?
# nl /etc/passwd | sed '2i drink tea'即可。

范例三:在第二行的后面加入两行字,例如“Drink tea or ....”  "drink bear?"
[root@linux ~]# nl /etc/passwd | sed '2a Drink tea or ....\
>drink bear ?'
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ....
drink bear ?
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
#这个范例的重点是,我们可以新增不只一行。就是说,可以新增好几行,
#但每行之间必须要以反斜线 \ 来进行新行的增加。

范例四:将第2~5行的内容替换为“No 2-5 number”。
[root@linux ~]# nl /etc/passwd | sed '2,5c No 2-5 lines'
    1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
    6 sync:x:5:0:sync:/sbin:/bin/sync

范例五:仅显示 5~7行。
[root@linux ~]# nl /etc/passwd | sed -n '5,7p'
    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6 sync:x:5:0:sync:/sbin:/bin/sync
    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# 为什么要加 -n 参数?执行 sed '5,7p'就知道了。

范例六:可以使用 ifconfig 列出 IP,若仅要 eth0 的IP地址呢?
[root@linux ~]# ifconfig eth0 | grep 'inet' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
阅读(619) | 评论(0) | 转发(0) |
0

上一篇:管道命令

下一篇:几种虚拟机对比

给主人留下些什么吧!~~