LinuxSir.cn,穿越时空的Linuxsir!

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

如何将一个文件中的内容替换到另一个文件中的特定行之间

[复制链接]
发表于 2006-5-2 01:30:58 | 显示全部楼层 |阅读模式
譬如第一个文件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 01:37:35 | 显示全部楼层
如果上面的问题可以解决的话, 还有个更复杂些的问题:

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

&section2
aaa
ooo
eee
&end
----------------------------------

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

使用道具 举报

 楼主| 发表于 2006-5-2 18:58:16 | 显示全部楼层

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

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

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


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

使用道具 举报

发表于 2006-5-3 19:34:24 | 显示全部楼层
Post by Osirix
譬如第一个文件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 "应该可以是一串指令吧?


try this:


  1. sed -ie '/&section1/,/&end/ { /&section1/r test2
  2. /&section1\|&end/!d }' test1
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-3 23:41:11 | 显示全部楼层
cool! 第一个问题已经搞定,
下面那两个是不是不太好实现...
回复 支持 反对

使用道具 举报

发表于 2006-5-4 10:50:35 | 显示全部楼层
还是可以实现的。比较笨的办法比如
  1. cat test1.txt | sed '/section1/,/end/{/section1\|end/!d};/section1/r test3.txt'|sed '/section1/,/section2/{/section1/!d}' | sed '/&section1/{N;/&section1\n&section1/D};/&end/{N;/&end\n&end/D}'
复制代码
不过思路很直接,就是贴上之后重新排版。
回复 支持 反对

使用道具 举报

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

本版积分规则

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