鸟哥sed知识补遗

简介:

鸟哥Sed知识补遗

格式 sed [-nefr] [n1,n2] 动作
-n 安静模式,只有经过sed处理过的行才显示出来,其他不显示。
-e 直接在命令行模式上进行sed的操作。貌似是默认选项,不用写。
-f 将sed的操作写在一个文件里,用的时候 -f filename 就可以按照内容进行sed操作了。
-r 使之支持扩展正则表达式
n1,n2 不一定需要, 选择要进行处理的行, 10,20 表示在10~20行之间处理

动作
a 添加,接字符串,添加到当前行的下一行。
c 替换, 接字符串,用他们替换n1到n2之间的行。
d 删除符合模式的行 sed '/regexp/d'   // 之间是正则表达式,模式在d前面,d后面一般不接任何内容。
i 插入,
接字符串,
添加到当前行的上一行。
p 打印,打印某个选择的数据,通常与-n 安静模式一起使用

g 获得内存缓冲区的内容,并替代当前模板块中的文本。

s 搜索, 还可以替换,类似与vim里的搜索替换功能。例如 1,20s/old/new/g 替换1~20行的old为new
注意动作最好用' '括起来,防止空格导致错误。
例子:
显示 passwd内容,将2~5行删除显示
woody@xiaoc:~/tmp$ cat -n /etc/passwd |sed ‘2,5d’

     1    root:x:0:0:root:/root:/bin/bash
     6    games:x:5:60:games:/usr/games:/bin/sh
     7    man:x:6:12:man:/var/cache/man:/bin/sh
     8    lp:x:7:7:lp:/var/spool/lpd:/bin/sh
............

在第二行后面一行加上Hello China 字符串
woody@xiaoc:~/tmp$ cat -n /etc/passwd |sed '2a Hello China!'

     1    root:x:0:0:root:/root:/bin/bash
     2    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
Hello China!
......

在第二行后面一行加上两行字,例如 "this is first line!" "this is second line!"
woody@xiaoc:~/tmp$ cat -n /etc/passwd |sed '2a This is first line! \         //使用续航符\后按回车输入后续行
> This is second line!'     // 以' 再回车结束

     1    root:x:0:0:root:/root:/bin/bash
     2    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
This is first line! 
This is second line!
     3    bin:x:2:2:bin:/bin:/bin/sh

将2~5行内容替换成 我是大好人!
woody@xiaoc:~/tmp$ cat -n /etc/passwd | sed '2,5c 我是大好人!'

     1    root:x:0:0:root:/root:/bin/bash
我是大好人!
     6    games:x:5:60:games:/usr/games:/bin/sh
     7    man:x:6:12:man:/var/cache/man:/bin/sh
     8    lp:x:7:7:lp:/var/spool/lpd:/bin/sh

只显示5~7行, 注意p 与-n 配合使用!
woody@xiaoc:~/tmp$ cat -n /etc/passwd |sed -n '5,7p'

     5    sync:x:4:65534:sync:/bin:/bin/sync
     6    games:x:5:60:games:/usr/games:/bin/sh
     7    man:x:6:12:man:/var/cache/man:/bin/sh

使用ifconfig 列出IP, 我们只想要 eth0的 IP地址
可以这样,先用grep 取出有IP的那一行,然后用sed去掉(替换成空) IP前面和后面的内容。
woody@xiaoc:~/tmp$ ifconfig eth0
eth0      Link encap:Ethernet HWaddr 00:16:36:02:41:aa 

          inet addr:172.30.171.35 Bcast:172.30.171.255 Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:1221198 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1125085 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1477365271 (1.3 GB) TX bytes:141539593 (134.9 MB)
          Interrupt:20 

woody@xiaoc:~/tmp$ ifconfig eth0 | grep inet |sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
172.30.171.35 
woody@xiaoc:~/tmp$ 
'^.*addr:' 表示 从开头到addr:的字符串,将它替换为空, 'Bcast.*$' 表示从Bcast到结尾的串,替换为空,
则剩下IP了!



在/etc/manpath.config中,将有MAN的设置取出,但不要说明内容。
woody@xiaoc:~/tmp$ cat /etc/manpath.config |grep 'MAN'|sed 's/#.*$//g'|sed '/^$/d'

MANDATORY_MANPATH            /usr/man
MANDATORY_MANPATH            /usr/share/man
MANDATORY_MANPATH            /usr/local/man
MANPATH_MAP    /bin            /usr/share/man
MANPATH_MAP    /usr/bin        /usr/share/man
MANPATH_MAP    /sbin            /usr/share/man
MANPATH_MAP    /usr/sbin        /usr/share/man
...........

注意#不一定出现在行首。 因此 /#.*$/ 表示 #和后面的数据直到行尾,即一行注释,将他们替换成空
/^$/ 表示空行,后接d 表示删除空行。
注意删除空行不能用替换方法,因为空行替换成空后,还是有换行符在那一行。

本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1619248如需转载请自行联系原作者

qianghong000
相关文章
|
Linux Shell Perl
Linux三大剑客之sed
一、简介 sed英文全称是stream editor。由贝尔实验室开发,如今主流Unix/Linux操作系统上都集成了这个工具。
1189 0
|
Shell Linux Perl
《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk
这两个工具能够极大简化需要进行的数据处理任务。 19.1 文本处理 能轻松实现自动格式化、插入、修改或删除文本元素的简单命令行编辑。 sed和gawk就具备上述功能 19.1.1 sed编辑器 被称为流编辑器。
1122 0
|
Perl Linux 机器学习/深度学习

热门文章

最新文章