一. sed简介

sed全名为 ,六编辑器,用程序的方式来编辑文本,功能十分强大

sed是一种分交互式编辑器,它使用预先设定好的编辑指令对输入的文本进行编辑,完成后再输出编辑结构.sed基本上都是使用正则表达式进行模式比配

二. sed的工作原理

sed会一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区,形成”模式空间”,接着用sed命令处理缓冲区中的内容,处理结束后,把缓冲区的内容送往屏幕.接着处理下一行的内容,这样不断重复,直至文件末尾.文件内容并没有发生改变,除非使用重定向存储输出

三. sed的基本语法

sed [选项] “ 文件名称

常用选项包括: -n,-e,-i,-f,-r

包括: [地址1, 地址2] [函数] [参数(标记)]

四. 常用选项

-n: 取消打印到屏幕

sed默认会把模式空间处理完毕后的内容输出到标准输出,也就是输出到屏幕上,加上-n选项后被设定为安静模式,也就是不会输出默认打印信息,除非子命令中特别指定打印选项,则只会把匹配修改的行进行打印。

例1.

echo -e ‘hello world’ | sed ‘s/hello/A/’

结果:

A world

nihao

例2.

echo -e ‘hello world’ | sed -n ‘s/hello/A/’

结果:加-n选项后什么也没有显示。

例3.

echo -e ‘hello world’ | sed -n ‘s/hello/A/p’

结果:A world/

说明:-n选项后,再加p标记,只会把匹配并修改的内容打印了出来。

-i 保存编辑内容至源文件

例1.

cat file.txt

结果: hello world

sed ‘/s/hello/A’ file.txt

结果: A world

cat file.txt

结果: hello world

例2.

sed -i ‘/s/hello/A’ file.txt

cat file.txt

结果: A world

例3. 备份源文件

sed i.bak ‘s/hello/A/’ file.txt

ls

结果: file.txt file.txt.bak

-e: 多点编辑,表示且关系

如果需要用sed对文本内容进行多种操作,则需要执行多条子命令来进行操作。

例1.

echo -e ‘hello world’ | sed -e ‘s/hello/A/’ -e ‘s/world/B/’

结果: A B

例2.

echo -e ‘hello world’ | sed -e ‘s/hello/A/;s/world/B/’

结果: A B

-f: 从指定文本中读取编辑脚本的sed语句

vim sed. # 在脚本文件中的子命令串就不需要输入单引号了

s/hello/A/

s/world/B/

echo “hello world” | sed -f sed.

结果:A B

-r: 支持使用扩展正则表达式

sed命令的匹配模式支持正则表达式的,默认只能支持基本正则表达式,如果需要支持扩展正则表达式,那么需要添加-r选项。

echo “hello world” | sed -r ‘s/(hello)|(world)/A/g’

结果: A A

五.地址定界

定址概念

默认情况下会对文本的每一行内容进行匹配,处理,输出,但如果我们只需文本的某些部分,就可使用定位特定的行还处理,这个定位指定的行的行为就叫"定址"

数字定址

数字定址就是指定具体的行去编辑,数字定址有几种方法

例1. 将文本的第4行的hello字符串替换成A,其他方不会被替换

sed -n ‘4s/hello/A/’

例2. 将文本的2-4行的hello字符串替换成A

sed -n ‘2,4s/hello/A/’

例3. 从文本的第2行开始往下数4行,也就是2-6行中的hello替换成A

sed -n ‘2,+4s/hello/A/’

例4.从第4行开始,每隔3行就减hello替换成A

sed -n ‘4~3/hello/A/’

例5. $表示最后一行 !表示相反的行数

sed -n ‘$s/hello/A/’ #匹配最后一行

sed -n “1!s/hello/A/” #除了第一行

3.正则定址

正则定址是通过正则表达式来匹配编辑内容所在行

例1. 将匹配到的行删除

sed -n ‘/hello/d’

例2. 删除空行

sed -n ‘/^$/d’

例3. 删除以TS开头到TE开头之间的行

sed -n ‘/^TS,/TE/d’

数字定址和正则定址的混用

例. 删除从第1行到以TS开头的行之间的内容

sed -n ‘/1,/^TS/d’

定址的分组

例1

vim sed.

/^TS,/TE/{ # 匹配TS开头的行到TE开头的行之间的内容

s/CN/China/ # CN替换成China

s//BJ/ # 替换成 BJ

sed -f sed.

例2

sed -n ‘2,4s{/cn/china/;/a/b/}’

六 sed的基本子命令

子命令a:表示在指定行下插入指定内容,以空格做分界线

例1:将文件中每一行下边都插入添加一行内容是A。

sed ‘a A’

例2:将文件中1-2行的下边插入添加一行内容是A

sed ‘1,2a A’

例3:将文件中1-2行的下边分别添加3行,3行内容分别是A、B、C,

sed ‘1,2a AnBnC’

2.子命令i:在指定行上边插入指定行的内容

例1:将文件中每一行上边都插入添加一行内容是A

sed ‘/i A’

例2:将文件中1-2行的上边插入添加一行内容是A

sed ‘/1,2i A’

例3:将文件中1-2行的上边分别添加3行,3行内容分别是A、B、C

sed ‘/1,2i AnBnC’

3.子命令c:把指定的行内容替换为自己需要的行内容

例1:将文件中所有的行内容都分别替换为A行内容。

sed ‘c A’

例2:将文件中1-2行的内容替换为A,只替换成一个A

sed ‘1,2c A’

例3:将中1-2行内容分别替换为了A

sed ‘1,2c AnA’

4.子命令d:表示删除指定的行内容

例1:删除内的所有行

sed ‘d’

例2:删除内的1-3行

sed ‘1,3d’

5.子命令y:字符替换,可替换多个字符,却不可以替换字符串且不支持正则表达式

例子:把中所有a字符替换为A符号,所有b字符替换为B符号。

sed ‘y/ab/AB’

强调一下,这里的替换源字符个数和目的字符个数必须相等;

6.子命令=:在指定行的上边显示行号

例:打印1,2的行号

sed ‘1,2=’

7.子命令r:将内容追加到指定行的下边

例:将a.txt文件内容读取并插入到文件第2行的下边

sed ‘2r a.txt’

8.子命令s:字符串替换,支持正则表达式

基本语法:

【】s / / / flags

s字符串替换,替换的时候可以把/换成其他的符号,比如 =

&: 用正则表达式匹配的内容进行替换

n:回调参数

(): 保存被匹配的字符一杯反向引用 n时使用

Flags:

n:可以是1-512,表示第n次出现的情况进行替换

g:全局更改

p:打印模式空间的内容

w file:写入到一个文件的file中

实战用法:

测试文件:

# cat

hello 123 world

例1:将每行包含的第一个hello的字符串替换为HELLO

sed ‘s/hello/HELLO/’

结果:HELLO 123 world

例2:使用扩展正则表达式匹配内容,将匹配到的内容替换成A

sed -r ‘s/[a-z]+ [0-9]+ [a-z]+/A/’

结果: A

例3:使用正则分组功能,1表示第一个分组,2表示第二个分组,3表示第三个分组

sed -r ‘s/([a-z]+ ) ([0-9]+) ([a-z]+ /321/)’

结果: world 123 hello

例4:使用&功能,代表整个匹配结果,111&222,表示将整个结果插入111 222之间

sed -r ‘s/([a-z]+ ) ([0-9]+) ([a-z]+)/&/ ‘

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!