构建高可用LINUX服务器Sed语法大全(学习笔记)

 1.Sed 的基础格式

     Sed的格式入下

            sed [ -nefr] [n1,n2] acction

    其中

    -n: 是安静模式,只有经过sed处理的行才会显示,其他不现实

    -e:表示直接在命令行上执行。是默认选项不用填写。

   -f: 将Sed的操作写在一个文件里面,用的时候-f filename 就可以按照内容进行Sed操作

-r :表示支持正则表达式

n1,n2 代表的是行数

Sed的action (动作)支持如下参数

 a: 表示添加,后接字符串,添加到当前行的下一行

c:表示替换,后接的字符串,用它来替换N1到N2之间的行

d:删除行

i:表示插入,后街字符串,添加到当然行的上一行

p:表示打印和-n一起使用

s: 表示搜索,还可以替换1,20s/old/new/g表示把1到20行的old换成new

Sed实例如下所示

  1)显示/etc/passwd的内容,然后把2-5行删除后显示

[root@LvsMaster sed]# cat -n 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
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
 2)在第2行上加上HELLOWORLD

  [root@LvsMaster sed]# cat -n passwd  | sed '2a Helloword!!!!'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
Helloword!!!!
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
3)在第2行后面加上两行字,例如:"This is first line!"和"This is second line!"
[root@LvsMaster sed]# cat passwd | sed '2a This is first line!! \
> This is second line'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
This is first line!!
This is second line
 4) 将2~5行的内容替换成"I am a man"

[root@LvsMaster sed]# cat -n passwd  | sed '2,5c "I am a man"'
     1  root:x:0:0:root:/root:/bin/bash
"I am a man"
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
5)只显示2-5行的数据,注意-n和p的配合

[root@LvsMaster sed]# cat -n passwd  | sed -n '2,5p'
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6)获取IP地址

 [root@LvsMaster sed]# ifconfig eth0 | sed -n '2p' | sed 's/^.* addr://g' | sed 's/Bcast.*//g'
192.168.0.2
Sed 用法举例说明

 1) 删除行首的空格

 sed 's/^[ ]* //g'  filename

 sed 's/^ * //g' filename

sed 's/^[[:space:]]* //g' filename

2)在行后和行前添加新行

行后命令

   sed 's/pattern/& \n/g' filename

行前命令

sed 's/pattern/\n&/g' filename

3) 使用变量(使用双引号),代码如下

sed -e "s/$var1/$var2/g" filename

4)在第一行前插入文本

sed -i '1 i\"插入的字符串"'  filename

5)在最后一行插入

sed -i '$a /pattern/   "插入字符串"' filename

6) 在匹配行前插入

sed -i '/pattern/  i "插入字符" ' filename

7)在匹配行后插入

sed -i '/pattern / a "插入字符"' filename

8)删除文本中空行和空格组成的行及#号注释的行

grep -v ^# filename | sed /^[[ :space: ]]* $/d | sed /^$/d

9)要将目录/modules下面所有的文件中的zhangsan都修改成list

sed -i 's/zhangsan/list/g' 'grep zhangsan -r1 /modules'