Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32208
  • 博文数量: 7
  • 博客积分: 251
  • 博客等级: 二等列兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 20:03
文章分类
文章存档

2011年(7)

我的朋友
最近访客

分类: LINUX

2011-03-08 16:54:45

sed的功能是将输入的数据进行处理,然后输出处理后的数据。处理操作包括:取代、删除、新增、截取特定行等功能。比如要在一个文本中的某些地方添加几行内容或删除文本中某些行和某些行中的一部分内容或将某些行用其他的内容来替代或某些行中的某部分内容用其他的内容来取代或截取某部分内容等等,sed的基本用法如图:

sf1

sf2

  • 删除

sed ‘2,5d’:删除2到5行

sed ‘2d’:删除第2行

sed ‘2,$d’:删除第2行道最后一行

sed ‘/^$/d’:删除空行

如果空行中只有空格字符的话,上面的命令就不能删除,得改成sed ‘/^\s*$/d’或则sed ‘/^ *$/d’

  • 添加

sed ‘2a drink tea’:在第二行后面添加“drink tea”

sed ‘2i drink tea’:在第二行前插入“drink tea”

sed ‘2a drink tea or \

>drink beer ?’     :在第二行后插入两行分别是:dreak tea or和drink beer

  • 替代

sed ‘2,5c drink tea’:将2到5行都替代为drink tea

  • 打印

sed  -n‘2,5p’:打印2到5行,必须加-n,否则所有行都会打印出来,并且2到5行每行都会打印两次

  • 取代

sed ‘1,20s/old/new/g’:将1到20行出现的old都用new来取代

sed ‘s/old//g’:将每一行出现的old都用空字符串来取代,即删除每一行出现的old字符串

sed ‘s/#.*$//g’":删除每一行中出现的#号注释的内容

注意:

上面的所有操作中对行的选择都是用行号来表示,其实可以通过正则表达式来匹配所需要的行,比如上面的删除操作sed ‘/^$/d’即是通过正则表达式来匹配空行,然后删除空行,添加、替代、打印和取代操作也都是这样,比如要在出现匹配g.*g正则表达式的字符串的行后面添加一行drink tea,则可以这样:sed ‘/g.*g/a drink tea’

cat –n iw.sh | sed –n ‘/down/p’等价于cat –n iw.sh | grep ‘down’就是将出现down字符串的行都过滤打印出来

另外sed的取代功能可以用来截取出文本中所需要的数据,比如要获取ifconfig eth0内容中的v4地址则可以通过如下的命令:

ifconfig eth0 | grep ‘inet ’| sed ‘s/^.*addr://g’| sed ‘s/Bcast.*$//g’

原理就是将v4地址前面的内容和后面的内容用空字符串代替,则最后得到的这行就只剩下v4地址了

sed可以连续几个动作一块操作比如上面的sed ‘s/^.*addr://g’| sed ‘s/Bcast.*$//g’可以改写成

sed -e ‘s/^.*addr://g’-e ‘s/Bcast.*$//g’,每个动作前面都得加-e

阅读(2898) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

moral_hazard2011-03-17 10:29:27

Hecate_Eos: 是不是grep 应该加个-w选项?因为还有inet6。.....
不需要,因为这里用匹配的字符串是“inet ”,在inet的后面有个空格

Hecate_Eos2011-03-09 16:17:22

是不是grep 应该加个-w选项?因为还有inet6。