LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 745|回复: 4

这个用sed是不是难以实现? 转

[复制链接]
发表于 2006-5-2 19:06:43 | 显示全部楼层 |阅读模式
因为一直没人回复, 所以转了下, 盼高人出手了
原帖地址:
如何将一个文件中的内容替换到另一个文件中的特定行之间
http://bbs.linuxsir.cn/showthread.php?t=255132

1. 第一个问题:
譬如第一个文件test1.txt内容:
1
22
333
&section1
la
la
la
&end

&section2
bla
bla
&end
------------------------------

第二个文件test2.txt的内容是
haa
haa
haa
ha
ha
okha
-----------------------------

想把test2.txt文件的内容替换test1.txt文件中&section1和紧邻的第一个&end之间, 有什么好办法呢?

如果这么用的话:

  1. sed -i -e '/&section1/r test2.txt'  -e '/&section1/,/&end/d'  test1.txt
复制代码

就会连把&section1那一行和&end也删掉了


不知有没其他好的比较短的写法?

另外, 一直不理解man sed中关于括弧{}的用法, 是不是可以在括弧里面加入任何sed指令, 但试了又不行......
man sed中有段话是这么写的:


  1.    Commands which accept address ranges
  2.        {      Begin a block of commands (end with a }).
复制代码

这里的"a block of commands "应该可以是一串指令吧?
 楼主| 发表于 2006-5-2 19:09:17 | 显示全部楼层
2. 如果上面的问题可以解决的话, 还有个更复杂些的问题:

譬如有个test3.txt的内容是这样子的:
a
bb
ccc
&section1
123
123
123
&end

&section2
aaa
ooo
eee
&end

&section3
333
ooo
ooo
&end

----------------------------------

然后想将这个test3.txt文件中&section2和紧邻&end之间的内容替换test1.txt文件中&section1和其紧邻&end之间, 不用script, 有什么方便的办法吗?


3. 还有第三个问题, 可能更难:
如何将test1.txt中section1中的内容 由test3.txt文件中section2中的内容替换(格式要求还是跟上面几楼的一样);
同时, 还要将test1.txt中section2中的内容 由test3.txt文件中section1中的内容替换


这个又该如何实现好呢?
回复 支持 反对

使用道具 举报

发表于 2006-5-2 22:07:41 | 显示全部楼层
恩,我对sed不熟悉,也不知道是否很容易办到,但是既然*Nix下面那么多工具,如果sed不好办,直接用awk或者perl之类的东西,什么好用就用什么嘛,没有必要钻牛角尖呢。当然有时候也有个兴趣问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-3 23:33:04 | 显示全部楼层
那哪位朋友对这几个问题 可否给个具体的法子? (无论用什么方式都可以)
回复 支持 反对

使用道具 举报

发表于 2006-5-4 10:00:43 | 显示全部楼层
first:
  1. sed  -e '/&section1/{a \&setion1
  2. r test2
  3. a \&end
  4. }' -e '/&section1/,/&end/d' test1
复制代码

懒了, ....
自己看吧.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表