Chinaunix

标题: 如何复制一个文件的一段内容到另一个文件 [打印本页]

作者: 往事如风2012    时间: 2012-01-31 13:31
标题: 如何复制一个文件的一段内容到另一个文件
a.txt的一段内容

start
abc
1
2
des
4
er
end

如何使用c shell 替换b.txt的一段内容

start
ni
2
5
end


谢谢各位

作者: wujiajia    时间: 2012-01-31 13:58
是要合并? cat a.txt >> a.txt
作者: 往事如风2012    时间: 2012-01-31 14:00
用a.txt文件里面的那段内容替换b.txt的那段内容,非常感谢。
作者: 往事如风2012    时间: 2012-01-31 14:23
请高手帮助解决,谢谢
作者: yinyuemi    时间: 2012-01-31 14:49
回复 4# 往事如风2012

我猜:

sed -e '/start/r a.txt' -e 'd;:a;n;/end/b;d;ba' b.txt

   
作者: 往事如风2012    时间: 2012-01-31 15:31
我刚试了试,好像不行啊,b文件没任何变化,你再帮忙看看?
作者: zooyo    时间: 2012-01-31 15:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: yinyuemi    时间: 2012-01-31 15:39
回复 6# 往事如风2012


    你期望的结果是什么样的?
作者: 往事如风2012    时间: 2012-01-31 15:39
用a.txt文件里面的那段内容start
abc
1
2
des
4
er
end
替换掉b.txt文件的一段内容,
start
ni
2
5
end
两个文件都有start和end那两行。除了start和end之间的部分,两个文件还有其他内容,只把b文件的列举部分内容换成a文件列举的内容,谢谢啊~
作者: 往事如风2012    时间: 2012-01-31 15:44
yinyuemi,我希望b.txt文件的那部分内容
start
ni
2
5
end
替换为a.txt的那部分内容
abc
1
2
des
4
er
end


作者: 往事如风2012    时间: 2012-01-31 15:47
假如b.txt文件的所有内容为
1
2
3
start
ni
2
5
end
4
5
6
我希望变为
1
2
3
start
abc
1
2
des
4
er
end
4
5
6
作者: 往事如风2012    时间: 2012-01-31 15:49
本帖最后由 往事如风2012 于 2012-01-31 15:52 编辑

假如b.txt以前的全部内容为
1
2
3
start
ni
2
5
end
4
5
6
我希望b.txt变为
1
2
3
start
abc
1
2
des
4
er
end
4
5
6
作者: 往事如风2012    时间: 2012-01-31 15:50
4在end的下面,谢谢
作者: yangkyo821    时间: 2012-01-31 15:57
  1. awk 'FNR==NR && /start/,/end/{a=a?a RS $0:$0;next}{FS="\n";RS="";sub("start\n.*end\n",a"\n",$0)}1' a.txt b.txt
复制代码

作者: 往事如风2012    时间: 2012-01-31 16:38
怎么都不能用呢,这么难么?没一个人能解决啊?期待大侠们的帮忙!
作者: 往事如风2012    时间: 2012-01-31 16:44
本帖最后由 往事如风2012 于 2012-01-31 16:48 编辑

a.txt为



b.txt为



b.txt变为


作者: 往事如风2012    时间: 2012-01-31 16:50
谁能解决啊?多谢了!!!!在线等
作者: yangkyo821    时间: 2012-01-31 17:05
本帖最后由 yangkyo821 于 2012-01-31 17:08 编辑

好吧,这个:
  1. awk 'FNR==NR{if($0 ~ /^start$/)while($0 !~ /^end$/){a=a?a RS $0:$0;getline;}next}{FS="\n";RS="";sub("start\n.*end\n",a"\nend\n",$0)}1' a.txt b.txt
复制代码

作者: 往事如风2012    时间: 2012-01-31 17:10
不能用,你那里没有linux机器么?
作者: yangkyo821    时间: 2012-01-31 17:18
我这里可以用,你用了出来什么结果
作者: 往事如风2012    时间: 2012-01-31 17:20
没什么结果,b文件没有任何变化,屏幕打印出b的内容
作者: yangkyo821    时间: 2012-01-31 17:23
是吗?
  1. [joe@joe-laptop ~]$ cat a.txt
  2. kashdf;las;
  3. asdjfa;slkd
  4. xxx
  5. 1111
  6. start
  7. abc
  8. 1
  9. 2
  10. des
  11. 4
  12. er
  13. end
  14. yyy
  15. 222
  16. yiouopupou
  17. joiu
  18. wq
  19. [joe@joe-laptop ~]$ cat b.txt
  20. xxx
  21. 111
  22. start
  23. ni
  24. 2
  25. 5
  26. end
  27. yyy
  28. 222
  29. [joe@joe-laptop ~]$ awk 'FNR==NR{if($0 ~ /^start$/)while($0 !~ /^end$/){a=a?a RS $0:$0;getline;}next}{FS="\n";RS="";sub("start\n.*end\n",a"\nend\n",$0)}1' a.txt b.txt
  30. xxx
  31. 111
  32. start
  33. abc
  34. 1
  35. 2
  36. des
  37. 4
  38. er
  39. end
  40. yyy
  41. 222
复制代码

作者: 往事如风2012    时间: 2012-01-31 17:26
你写和我一模一样的两个文件试试,我这里反正不行
作者: yangkyo821    时间: 2012-01-31 17:29
因为你的两个文件在windows下面建立的,所以会没有效果
作者: 往事如风2012    时间: 2012-01-31 17:35
嗯,为什么呢,我刚在linux机器下也建立了一下,确实打印到屏幕了,但是没保存到b.txt,怎么解决呢
作者: yangkyo821    时间: 2012-01-31 17:42
  1. awk 'FNR==NR{if($0 ~ /^start$/)while($0 !~ /^end$/){a=a?a RS $0:$0;getline;}next}{FS="\n";RS="";sub("start\n.*end\n",a"\nend\n",$0)}1' a.txt b.txt > c.txt;mv b.txt b.bak;mv c.txt b.txt
复制代码

作者: 往事如风2012    时间: 2012-01-31 18:07
非常感谢!!!yangkyo821
作者: yinyuemi    时间: 2012-01-31 23:24
回复 6# 往事如风2012


    sed 用-i 选项
作者: 往事如风2012    时间: 2012-02-01 12:39
如果我那个start变为[inf start] end变为[inf end]怎么解决呢?

回复 26# yangkyo821


   
作者: 往事如风2012    时间: 2012-02-01 13:09
你好
如果a.txt 和b.txt文件的start和end之间有空格怎么解决呢?


回复 26# yangkyo821


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2