sed的基础使用

1.       akwsed基础

awksed有一些相似处:

1)      激活语法相同

2)      利用它们,用户可以指定为输入文件的每一行都执行的指令

3)      为匹配模式使用正则表达式

 

1.2激活语法

Command `script` filenames

这里commandawksedscript是可以被awksed理解的命令清单,filenames表示命令所作用的文件清单。

       为避免shell执行替换,要使用单引号将script引起来。Script的真正内容对于awksed来说大大不同。

       如果没有给出文件名,awksed都从STDIN中读入,这使得它们可用作其他命令的输出过滤器。

 

1.3基本操作

awksed命令运行时,执行如下操作:

1)  从输入文件中读取一行

2)  为该行做一个拷贝

3)  在该行上执行所给的脚本

4)  重复前三步

这些操作描述了awksed的主要特点,它们提供了使用单个脚本作用于文件中每一行或每条记录的方法。当读取完每条记录后,输入文件被关闭。若输入文件时在filenames中指定的最后一个文件,则退出命令。

 

脚本结构及脚本的执行

Awksed所指定的脚本包含一行或多行记录,这些记录的格式为:

/pattern/action

这里pattern为正则表达式,action表示一些动作。

awksed正在执行一个脚本时,它们为每条记录执行如下过程:

1)  顺序搜索每个pattern直到发生一个匹配

2)  当发现匹配后,为输入行执行相应的动作

3)  当动作执行完毕,到达下一个模式并重复第一步

4)  当所有的模式都试过一遍后,读取下一行

在第四步执行前,sed显示被改动的记录,在awk中,必须手动显示这条记录。

Akwsed中科院执行的动作有很大不同。在sed中,可以使用的动作包括编辑单个字母的命令。而在awk中,动作通常是一个编程语句集合。

 

 

2.使用sed

Sed是一个可用作过滤器的流编辑器,它读取每行输入然后执行一组请求动作,sed命令的基本语法为:

Sed `script` files

这里files是一个或多个文件清单,script是一个或多个按如下格式写出的命令:

/pattern/action

       这里,模式pattern为正则表达式,action是命令。若pattern被删除,则为每一行都执行动作action

 

sed中可以利用的某些动作

动作

描述

P

打印该行

d

删除该行

s/patten1/pattern2

用第二种模式pattern2替代第一种模式pattern1

 

2.1 打印行

新建文件,并存储计算机配件价格清单数据

$ cat prices.txt

Cpu        500

Disk        300

Keyword 200

Network

Sound     500

Display    200

 

使用sed列出所有价格

$ sed ‘/[0-9].*$/p’ prices.txt

作用是:打印所有过滤出的价格行

Cpu             500

Cpu             500

Disk            300

Disk            300

Keyword         200

Keyword         200

Network         asd

Sound           500

Sound           500

Display         200

Display         200

结果中,可以看出:匹配的结果都会显示重复的一行。其中Network是不匹配pattern的。

如果需要避免输出行为,可以为sed加上-n选项。

 

2.2 删除行

/pattern/d

例如:

$sed ‘/[0-9].*$/d’ prices.txt

将删除满足pattern条件的行。

注意:返回的结果可以通过管道方法,将删除后的结果存储到新的文件中

例如:$sed ‘/[0-9].*$/d’ prices.txt  >  newPrices.txt

newPrices.txt的内容:

$ cat newPrices.txt

Network         asd

 

2.3 执行替换

假设现在需要将Prices.txt中的CPU更改为GPU,可通过sed命令sssubstitute的首字母)。

/pattern/s/pattern1/pattern2

这里,patternpattern1pattern2都是正则表达式。在s命令中,在任何匹配pattern的行中都用pattern2代替pattern1

通常,都会省略pattern,这是s命令的用法可以看作:

s/pattern1/pattern2

此时,s命令为行个输入行执行替换。

$ sed  ‘/s/asd/600/’  prices.txt

Network的错误价格asd替换为 600

 

a.执行全局替换

格式:$ sed ‘/s/pattern1/pattern2/g’ filenames

默认缺省行为只替换一次。

例如:

$ cat nash.txt

One two three four four four five six

 

$ sed ‘/s/four/number4/’ nash.txt

输出:One two three number4four four five six

后面的两个four没有影响。

通过g选项达到全局替换,$ sed ‘/s/four/number4/g’ nash.txt

 

 

b.重用表达式值

prices.txt的价格前面加上美元符号$

$ sed  ‘/.*/s/[0-9].*/$&’  prices.txt

分析:

Pattern.*,作用匹配所有行

Pattern1[0-9].*过滤出符合条件的行

Pattern2:将符合条件的数据存储在&$&即在原有价格前加上美元符号$

输出结果:

Cpu             $500

Disk            $300

Keyword         $200

Network         asd

Sound           $500

Display         $200

因为Network不满足pattern1[0-9].*所以没有进行操作

 

 

2.4 使用多个 sed命令

格式:sed –e ‘command’ –e ‘command1’ …. –e ‘commandN’

好处是:多次更新文件或替换,仅更新一次文件,所以高效而且不易出错。

 

2.5 管道中使用sed

在前面已经介绍了sed接收STDIN的输入。

$ ls /home | sed  -n  ‘/Jinyong/p’

返回ls /home中包含Jinyong字符的行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值