Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110499
  • 博文数量: 38
  • 博客积分: 330
  • 博客等级: 一等列兵
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-08 23:30
文章分类

全部博文(38)

文章存档

2012年(36)

2011年(2)

我的朋友

分类: LINUX

2012-02-20 22:48:37

文件如下:
[Server1]
ServerID=1001
ServerName=ABC
....
[Server2]
ServerID=1001
ServerName=ABC
....
[Server3]
ServerID=1001
ServerName=ABC
....
[Server4]
ServerID=1001
ServerName=ABC
....
意思很明显是每个Server下面有完全相同的行,但我只想修改Server4下面的ServerID为2222。请帮个忙???急


楼主的问题,很显而易见,就是对[Server4]这个段落进行操作,不管段落中间有多少行,ServerID的位置固不固定,都应该完成替换,这才是好的答案。在下抛砖引玉写几个答案:
  1. sed -n '1h;/\[/!{1!H;$!b};1!{x;/\[Server4\]/s/\(ServerID=\)\w*/\12222/;p}' file
复制代码
  1. sed '/\[Server3]/{:a;N;/\n\[/!{$!ba};s/\(ServerID=\)\w*/\12222/}' file
复制代码
  1. awk 'BEGIN{FS=OFS="="}/\[Server4]/{i=1}i{if($1=="ServerID"){$2=2222;i=0}}1' file
复制代码
这3个命令都是很好的办法。完成对“段落”的操作,不局限与行数与位置。

探索精神很好,不过不用这么费劲。
  1. sed '/\[Server4]/{:a;N;/\n\[/!{$!ba};s/\(ServerID=\)\w*/\12222/g}' file
  2. [Server1]
  3. ServerID=1001
  4. ServerName=ABC
  5. ....
  6. [Server2]
  7. ServerID=1001
  8. ServerName=ABC
  9. ....
  10. [Server3]
  11. ServerID=1001
  12. ServerName=ABC
  13. ....
  14. [Server4]
  15. ServerID=2222
  16. ServerName=ABC
  17. ServerID=2222
  18. ....
复制代码
甚至可以指定只替换第2个: sed '/\[Server4]/{:a;N;/\n\[/!{$!ba};s/\(ServerID=\)\w*/\12222/2}' file
阅读(1090) | 评论(0) | 转发(0) |
0

上一篇:格式化打印加颜色

下一篇:pxe

给主人留下些什么吧!~~