sed基本用法二:常用命令

不同的sed版本的命令实现有可能有微改动,但是用法基本不变,这里的事例都是在以下环境中实验:

环境:centos 6.4 

sed版本:sed-4.2.1-10.el6.x86_64

sed命令语法格式:

[address] command


address在“sed基本用法一”中已经讲过,这里不再赘述

还有一种写法,因为在脚本程序中不常用,所以在这里只是了解一下即可

address{

command1

command2

....

}

当多条command时要求右大括号必须单独一行,这样大括号中的所有命令都作用于address匹配的内容


另外如果命令之间用分号(;)分隔(或者用sed的-e选项),则可以把多个Sed命令放在同一行。


sed的常用命令有以下几个方面:删除,替换,插入,追加,更改(和替换是不一样的命令),下面逐个讲解


【删除】

命令:[address]d

说明:命令很简单,在address后面直接跟字符d即可

事例:

删除文件中第一行内容



【替换】

命令:[address] s/pattern/replacement/flags

说明:

1,pattern是正则表达式,要匹配替换的地方,红色字符斜杠(/)是定界符,可以用除换行符外的任意字符来做定界符,但是address中的定界符必须用斜杠

2,replacement是一个字符串,用来替换与pattern匹配的内容,下面三个字符在replacement中有特殊含义:

  • &    用正则表达式匹配的内容进行替换(即这个符号表示pattern匹配的内容)
               而在address中表示匹配最后一行,而在正则表达式中表示一行中的结尾符,注意三个的区别
  • \n   匹配第n个子串(n表示1到9的数字),这个子串以前在pattern中用“\(”和“\)”指定,称为回调
  • \     转义字符,当在replacement中存在$符号时就可以用"\$"进行转义

3,flags表示替换的标志,可以取以下几个:

  • n             1到512之间的一个数字,表示对本模式中指定模式第n次出现的情况进行替换
  • g             对模式空间的所有出现进行全局更改。没有g时通常只有第一次出现的情况才会被取代
  • p             打印模式空间内容
  • w file       将模式空间的内容写到文件file中

事例:



【追加】

命令:[line-address]a text

           [line-address]r file

说明:1,追加只能作用于单行内容,在匹配的单行之后增加text的内容

           2,a后面可以跟制表符(需要转义斜杠如:tab键要输入\\t而不是\t),这样制表符也会追加到text之前,而                        text中的制表符不需要转义

           3,r命令后面是跟一个文件名file,这样会把file中的内容追加到下一行中,想追加多行内容时可以使用此方法

                (r是read的缩写,读文件内容到模式空间,相应还有w为write的缩写,把模式空间内容写入到文件中

事例:



【插入】

命令:[line-address]i text

说明:1,插入只能作用于单行内容,在匹配的单行之前插入text的内容

           2,i命令后面可以跟制表符(需要转义斜杠如:tab键要输入\\t而不是\t),这样制表符也会追加到text之前,而                  text中的制表符不需要转义

事例:



【更改】

命令:[address]c text

说明:1,更改命令可以作用于单行,也可以作用于一个范围的行

   2,c命令后面可以跟制表符(需要转义斜杠如:tab键要输入\\t而不是\t),这样制表符也会追加到text之前,而                  text中的制表符不需要转义

事例:

最后一个命令中“1,2”就是表示第一行到第2行的一个范围行,把这整个范围行替换成"change more line"



【转换】

命令:[address]y/source/dest/

说明:1,将匹配到的source中的每个字符替换为dest中对应的字符,这也要求source和dest的长度要相等

           2,字符的位置可以不用在文件中连续

           3,根据前两个说明可以很快写出转换文本大小写的命令(下面命令就是把小写字符转换成相应的大写字符)

                 [address]y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

事例:



补充事例:

要求:删除一个范围内容中的一条记录

例如:

源文件内容,删除<b>标记块中的<save>这条记录:

itsenlin@itsenlin-Aspire-4750 ~/test $ cat log

<a>

<test>

<save>

</a>

<b>

<test>

<save>

</b>

修改之后的内容如下:

<a>

<test>

<save>

</a>

<b>

<test>

</b>


这个就需要使用到前面提到的"address{command}"的用法了,代码如下:

itsenlin@itsenlin-Aspire-4750 ~/test $ sed '/<b>/,/<\/b>/{ /save/d }' log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值