shell脚本【文件操作4】sed

1  sed基本介绍

        sed命令的格式:

        sed  [-nefr]  ‘/pattern/action’  file-list

 

        举例:

     命令:s(替换)

sed  ‘s/wust/hanyang/’  file-list

     表示对输入文件file-list进行文本wust匹配,如果匹配到就用hanyang进行替换。

     选项[-nefr]是可选项,如果用不到也可以没有。

 

1.1sed是一种不损伤源文件的编辑器

     首先,不同于awk只是搜索,sed工具可以对文本匹配之后进行编辑操作。

     但是,sed并不会损伤源文件,因为它只会对缓冲区内的数据进行更改,而更改后的文本直接输出到标准输出上,而不会保存到源文件中。

     所以,sed并不会损伤源文件。

     虽然可以添加“—i”选项对源文件直接更改,但是最好是先不要使用-i选项,先输出看一下,再添加-i选项。

 

1.2sed工具自己处理正则表达式

        awk也是自己处理一些字符串正则表达式的匹配。

     这个就相当于某些元字符和字符串需要直接提交给sed工具,而不是shell来解析。

     即,需要用单引号,将直接提交给sed工具那一部分括起来,防止shell错误解析。

 

1.3sed的模式匹配有正则的字符串匹配,还可以是行。两种形式上的区别?

        awk工具的pattern部分,也有这两种之分,正则和判别真伪的表达式。

        sed的两种和awk工具的两种基本一致,但略有差别。

        ① 字符串及正则表达式

        形式:/string/(两边需要加“//”)

            举例:

                    sed  ‘/chen/d’  file-list

        表示删除模式匹配到chen字符串的行

        ② 行

            举例:

                    sed  ‘3d’  file-list

        表示删除第3

        单单表示行的这种数字,不需要加\\”符号进行限定。并且不需要像awk工具那样需要进行条件判别:NR==3NRawk的一个程序变量)

 

1.4sed运用场景

        ⑴ 对管道的数据做进一步处理

        sed流编辑器是一个非常优秀的匹配、替换的工具。

        awksed除了自己可以接收标准输入、文件等的输入文本外,均可以接收管道传过来的数据。即,awksed可以对管道前命令的输出做进一步的处理,输出筛选或处理过的数据。

        比如:

nl  /etc/passwd | sed ‘2a drink tea’

     含义:列出/etc/passwd的内容并打印行号;同时,在第2行下新增一行,添加字符串:drink tea

        ⑵ 处理大文件

     如果有一个100万行的文件,此时你用vi/vim打开并对它进行修改时,你可能会疯掉,此时用sed 是一个明智的选择,它非常适合做大文件的处理。

 

2  sed的命令

表2.1 sed命令

命令

功能

s

替换

p

通常与选项“-n”一起使用,表示只打印匹配行

d

删除

g

与命令s配合使用,表示全部替换

a\

在匹配行后添加一行或多行

i\

在匹配行前插入一行或多行

c\

用新文本替换当前行中的文本

r

从文件中读取输入行

w

将行写入文件

q

结束或退出sed

y

按字符替换


重点命令讲解:

2.1  替换命令:s

     指令格式:sed  ‘[address]s/pattern/replacement/flags’  file-list

        举例:

sed  -n  ‘3,5s/str1/str2/p’  file  

#file文件的35行的文本内容进行str1匹配,若成功则以str2替换。

        说明:

        ⑴ 选项:-n是取消默认输出;flagp是打印模式空间的内容。这两个组合使用则只打印匹配成功的行。

        ⑵ address3,5  逗号运算符是一个范围运算符,在命令之前出现表示只对这个范围的文本进行模式匹配。

        ⑶ 替换命令sflags有哪些:

        n1~512之间的数字,表示对模式空间中指定模式的第n次出现进行替换。如一行中有3A,而只想替换第二个A。(注意是一行的内容,每读一次新行n随之更新)

        g:对模式空间的所有匹配进行全局更改。没有g则只有第一次匹配进行替换。如一行有3A,若没有flagg,则仅替换第一个A

        p:打印模式空间的内容。

        w file:将模式空间的内容写到文件file中。sed  ‘s/^chen/Chen/w file2’  file1

 

2.2  打印命令:p

     指令格式:sed  ‘/pattern/p’  file-list

          sed  ‘n,mp’  file-list

        举例:

sed  -n  ‘3,5p’  file

     含义:打印文件的3~5行。

     为什么要使用-n选项?

     因为不用-n选项的话,会有一个默认输出,即会把所有读入的行,都输出一遍。我们用了p之后,会输出匹配的行。这样,不仅有静默输出的内容还有匹配成功行的内容,混在一起的话不方便观察。

 

2.3  删除命令:d

     指令格式:sed  ‘/pattern/d’  file-list(删除模式匹配成功的那一

        sed  ‘n,md’  file(删除文件filen~m行 )

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值