Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1725112
  • 博文数量: 362
  • 博客积分: 10587
  • 博客等级: 上将
  • 技术积分: 4098
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-10 18:15
文章分类

全部博文(362)

文章存档

2014年(1)

2013年(58)

2011年(115)

2010年(112)

2009年(76)

分类:

2010-09-19 16:27:02


[root@linux ~]# sed [-nefr] [动作]
参数:
-n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
      的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过
      sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在指令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
      sed 动作;
-r  :sed 的动作支持的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i  :直接修改读取的档案内容,而不是由屏幕输出。

动作说明:  [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 就是啦!
范例:

辅导书辅导书fsdfdf

删除2到5行 (nl代表打印,对文件内容显示进行输出行号)
#nl /etc/passwd | sed '2,5d' 

增加下一行的内容
#nl /etc/passwd | sed '2a hello senlin'
[root@linux ~]# nl /etc/passwd | sed '2a hello senlin'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
hello senlin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin

利用\可以多加很多行
[root@linux ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin

打印第5行到第7行
test@linux-c93g:/tmp# nl /etc/passwd | sed -n '5,7p'  (当有p打印的时候要加n,要知道什么时候该加-n参数)
     5  mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
     6  games:x:12:100:Games account:/var/games:/bin/bash
     7  wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false

将第2行到第10行替换成我们要的字符:
#nl /etc/passwd | sed '2,10c hello world'
test@linux-c93g:/tmp> nl /etc/passwd | sed '2,10c hello world'
     1  root:x:0:0:root:/root:/bin/bash
hello world
    11  news:x:9:13:News system:/etc/news:/bin/bash
    12  uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
    13  postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false
    14  uuidd:x:100:101:User for uuidd:/var/run/uuidd:/bin/false
    15  ntp:x:74:102:NTP daemon:/var/lib/ntp:/bin/false

linux-c93g:~ # ifconfig | sed -n '2p' 打印出第2行
          inet addr:192.168.1.233  Bcast:192.168.1.255  Mask:255.255.255.0

利用sed获取ip地址
linux-c93g:~ # ifconfig | sed -n '2p'|sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.233  
linux-c93g:~ # 

删除 /etc/manpath.config 中注释行以及空行 两种方法都可以
linux-c93g:~ # more /etc/manpath.config | grep "MAN" | sed 's/#.*$//g' | sed '/^$/d'
linux-c93g:~ # more /etc/manpath.config | grep  "MAN" | sed 's/#.*$//g' | grep -v "^$" 

.bash_history最后一行的下一行添加This is a test ($a 代表最后一行之后添加)
linux-c93g:~ #sed '$a This is a test' ~/.bash_history

阅读(998) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~