全部博文(362)
分类:
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 就是啦! 范例: |
[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