linux下sed的使用

本篇主要讲解:c#

---sed文本块的处理bash



1、sed文本块的处理测试


1.sed文本块处理的基本用法spa


 经常使用的处理选项有:i 行前插入文本server

  a  行后插入文本ip

  c  替换当前行文档

 须要插入多行文本内容时,一种方法是以“\n”表示换行,另外一种是以“\”强制分隔。后面这种方法可能更符合阅读习惯。字符串


 使用“&”可调用s替换操做中的整个查找串it


仍是用测试文档:rclocal.txtio

[root@svr5 ~]# cat rclocal.txt

1 #!/bin/sh

2 #

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local


1)行前插入文本 i

在第3行以前插入一行“Insert before”字符串:

[root@svr5 ~]# sed '3iInsert before' rclocal.txt

1 #!/bin/sh

2 #

Insert before

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

在最后一行以前插入一行“Insert before”字符串:

[root@svr5 ~]# sed '$iInsert before' rclocal.txt

1 #!/bin/sh

2 #

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

Insert before

7 touch /var/lock/subsys/local

在包含“init”的每一行以前插入一行“xxxx”字符串:

[root@svr5 ~]# sed '/init/ixxxx' rclocal.txt

1 #!/bin/sh

2 #

.xxxx

3 # This script will be executed *after* all the other init scripts.

xxxx

4 # You can put your own initialization stuff in here if you don't

xxxx

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

2)行后插入文本 a

在第3行以后插入一行“Insert after”字符串:

[root@svr5 ~]# sed '3aInsert after' rclocal.txt

1 #!/bin/sh

2 #

3 # This script will be executed *after* all the other init scripts.

Insert after

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

在最后一行以后追加一行“Insert after”字符串:

[root@svr5 ~]# sed '$aInsert after' rclocal.txt

1 #!/bin/sh

2 #

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

Insert after

在包含“stuff”的每一行以后插入一行“xxxx”字符串:

[root@svr5 ~]# sed '/stuff/axxxx' rclocal.txt

1 #!/bin/sh

2 #

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

xxxx

5 # want to do the full Sys V style init stuff.

xxxx

6

7 touch /var/lock/subsys/local


3)替换当前行 c

将第1行整行替换为“#!/bin/bash”:

[root@svr5 ~]# sed '1c#!/bin/bash' rclocal.txt

#!/bin/bash

2 #

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

将第1~4行总体替换为“#!/bin/bash”:

[root@svr5 ~]# sed '1,4c#!/bin/bash' rclocal.txt

#!/bin/bash

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

将包含“/bin/sh”的每一行分别替换为“#!/bin/bash”:

[root@svr5 ~]# sed '/\/bin\/sh/c#!/bin/bash' rclocal.txt

#!/bin/bash

2 #

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local


将包含单词“init”的每一行分别替换为“#!/bin/bash”:

[root@svr5 ~]# sed '/\<init\>/c#!/bin/bash' rclocal.txt

1 #!/bin/sh

2 #

#!/bin/bash

4 # You can put your own initialization stuff in here if you don't

#!/bin/bash

6

7 touch /var/lock/subsys/local

************注:\<表示已某单词开头、,  \>表示已某单词结尾 \<init\>就表示整个单词,像initital是不符合检索结果的*********************************


4)多行文本的处理


须要插入多行文本内容时,一种方法是以“\n”表示换行,另外一种是以“\”强制分隔。后面这种方法可能更符合阅读习惯。以在第3行以前插入三行文本,内容依次为“xxxx”、“yyyy”、“zzzz”为例,下面的操做能够对比两种方法的效果:


[root@svr5 ~]# sed '3ixxxx\nyyyy\nzzzz' rclocal.txt         //方法1

1 #!/bin/sh

2 #

xxxx

yyyy

zzzz

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

[root@svr5 ~]# sed '3ixxxx\

> yyyy\

> zzzz' rclocal.txt                                         //方法2

1 #!/bin/sh

2 #

xxxx

yyyy

zzzz

3 # This script will be executed *after* all the other init scripts.

4 # You can put your own initialization stuff in here if you don't

5 # want to do the full Sys V style init stuff.

6

7 touch /var/lock/subsys/local

2.利用sed文本块处理调整系统配置


1)修改主机名


主机名的配置文件位于/etc/sysconfig/network,主机名设置以“HOSTNAME”打头。

修改前:

[root@svr5 ~]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=svr5.tarena.com

将以“HOSTNAME”开头的行整行替换,设为“HOSTNAME=mysvr.example.org”:

[root@svr5 ~]# sed -i '/^HOSTNAME/cHOSTNAME=mysvr.example.org' /etc/sysconfig/network

确认替换结果:

[root@svr5 ~]# cat /etc/sysconfig/network NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=mysvr.example.org

如下操做能够恢复原状:

[root@svr5 ~]# sed -i '/^HOSTNAME/cHOSTNAME=svr5.tarena.com' /etc/sysconfig/network

[root@svr5 ~]# cat /etc/sysconfig/network NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=svr5.tarena.com

2)添加hosts主机映射记录

在/etc/hosts文件最后一行后添加任务要求的2条映射记录:

[root@svr5 ~]# sed -i '$a192.168.4.5 svr5.tarena.com svr5\

> 119.75.217.56 www.baidu.com' /etc/hosts

验证添加效果:

[root@svr5 ~]# tail -2 /etc/hosts

192.168.4.5 svr5.tarena.com svr5

119.75.217.56 www.baidu.com



2.sed文本处理练习

先创建一个包含英文段落的测试文件,好比可以使用/etc/nsswitch.conf文件。为了方便查看效果,咱们将从这个文件中取第4~10行,并去掉开头的“# ”。开头的10行内容以下所示:


[root@svr5 ~]# head -10 /etc/nsswitch.conf

#

# /etc/nsswitch.conf

#

# An example Name Service Switch config file. This file should be

# sorted with the most-used services at the beginning.

#

# The entry '[NOTFOUND=return]' means that the search for an

# entry should stop if the search in the previous entry turned

# up nothing. Note that if the search failed due to some other reason

# (like no NIS server responding) then the search continues with the


截取操做及结果以下所示:

[root@svr5 ~]# sed -n '4,10p' /etc/nsswitch.conf | sed 's/# //' > nssw.txt

[root@svr5 ~]# cat nssw.txt

An example Name Service Switch config file. This file should be

sorted with the most-used services at the beginning.

#

The entry '[NOTFOUND=return]' means that the search for an

entry should stop if the search in the previous entry turned

up nothing. Note that if the search failed due to some other reason

(like no NIS server responding) then the search continues with the

本小节的操做即便用nssw.txt做为测试文件。

1)删除文件中每行的第二个、最后一个字符。

分两次替换操做,第一次替换掉第2个字符,第二次替换掉最后一个字符:

[root@svr5 ~]# sed 's/.//2;s/.$//' nssw.txt

A example Name Service Switch config file. This file should b

srted with the most-used services at the beginning

#

Te entry '[NOTFOUND=return]' means that the search for a

etry should stop if the search in the previous entry turne

u nothing. Note that if the search failed due to some other reaso

(ike no NIS server responding) then the search continues with th



2)删除文件中每行的第二个、最后一个单词。


分两次替换操做,第一次替换掉第2个单词,第二次替换掉最后一个单词:

[root@svr5 ~]# sed -r 's/[a-Z]+//2;s/[a-Z]+([^a-Z]*)$/\1/' nssw.txt

An Name Service Switch config file. This file should

sorted the most-used services at the .

#

The '[NOTFOUND=return]' means that the search for

entry stop if the search in the previous entry

up . Note that if the search failed due to some other

(like NIS server responding) then the search continues with

3)将文件中每行的第一个、第二个字符互换。

每行文本拆分为“第1个字符”、“第2个字符”、“剩下的全部字符”三个部分,而后经过替换操做重排顺序为“2-1-3”:

[root@svr5 ~]# sed -r 's/^(.)(.)(.*)/\2\1\3/' nssw.txt

nA example Name Service Switch config file. This file should be

osrted with the most-used services at the beginning.

#

hTe entry '[NOTFOUND=return]' means that the search for an

netry should stop if the search in the previous entry turned

pu nothing. Note that if the search failed due to some other reason

l(ike n up . Note that if the search failed due to some other

(like NIS server responding) then the search continues with


4)将文件中每行的第一个、第二个单词互换。


每行文本拆分为“第1个单词”、“单词分隔”、“第2个单词”、“剩下的全部字符”四个部分,而后经过替换操做重排顺序为“3-2-1-4”:


[root@svr5 ~]# sed -r 's/([a-Z]+)([^a-Z]*)([a-z]+)(.*)/\3\2\1\4/' nssw.txt example An Name Service Switch config file. This file should be

with sorted the most-used services at the beginning.

#

entry The '[NOTFOUND=return]' means that the search for an

should entry stop if the search in the previous entry turned

nothing up. Note that if the search failed due to some other reason

(no like NIS server responding) then the search continues with the


5)删除文件中全部的数字、行首的空格。


因原文件内没有数字,行首也没有空格,这里稍做一点处理,生成一个新测试文件:

[root@svr5 ~]# sed 's/o/o7/;s/l/l4/;3,5s/^/ /' nssw.txt > nssw2.txt

[root@svr5 ~]# cat nssw2.txt

An exampl4e Name Service Switch co7nfig file. This file should be

so7rted with the most-used services at the beginning.

#

.The entry '[NOTFOUND=return]' means that the search fo7r an

entry sho7ul4d stop if the search in the previous entry turned

up no7thing. Note that if the search fail4ed due to some other reason

(l4ike no7 NIS server responding) then the search continues with the


以nssw2.txt文件为例,删除全部数字、行首空格的操做以下:


1.[root@svr5 ~]# sed -r 's/[0-9]//g;s/^( )+//' nssw2.txt

2.An example Name Service Switch config file. This file should be

3.sorted with the most-used services at the beginning.

4.#

5.The entry '[NOTFOUND=return]' means that the search for an

6.entry should stop if the search in the previous entry turned

7.up nothing. Note that if the search failed due to some other reason

8.(like no NIS server responding) then the search continues with the


6)为文件中每一个大写字母添加括号。


使用“&”可调用s替换操做中的整个查找串,因此可参考下列操做解决:

[root@svr5 ~]# sed 's/[A-Z]/(&)/g' nssw.txt

(A)n example (N)ame (S)ervice (S)witch config file. (T)his file should be

sorted with the most-used services at the beginning.

#

(T)he entry '[(N)(O)(T)(F)(O)(U)(N)(D)=return]' means that the search for an

entry should stop if the search in the previous entry turned

up nothing. (N)ote that if the search failed due to some other reason

(like no (N)(I)(S) server responding) then the search continues with the


或者:

[root@svr5 ~]# sed -r 's/([A-Z])/(\1)/g' nssw.txt

(A)n example (N)ame (S)ervice (S)witch config file. (T)his file should be

sorted with the most-used services at the beginning.

#

(T)he entry '[(N)(O)(T)(F)(O)(U)(N)(D)=return]' means that the search for an

entry should stop if the search in the previous entry turned

up nothing. (N)ote that if the search failed due to some other reason

(like no (N)(I)(S) server responding) then the search continues with the

相关文章
相关标签/搜索