永发信息网

多行文本复制,如何用sed或awk或别的工具实现

答案:2  悬赏:30  手机版
解决时间 2021-03-16 13:13
有文本
aaa
bbb
ccc
ddd
eee
匹配bbb-ddd后复制,变为:
aaa
bbb
ccc
ddd
bbb
ccc
ddd
eee
最佳答案
sed -rn 'p;/bbb/,/ddd/H;/ddd/{g;s/^\n//;p}' file.txt

说明:
sed内部有两个空间,一个模式空间,一个保留空间。
通常sed将文本内容逐行读入模式空间进行处理,保留空间仅用于暂时保留内部数据用于与模式空间的数据交换。可以这么理解:模式空间用于与外部的数据交换,保留空间用于sed内部的数据交换,最终还是要通过模式空间输出。


/bbb/,/ddd/H;  逐行处理时将bbb~ddd区段的文本从sed的模式空间附加到保留空间内,每行内容之间以\n分割,因此,最终保留空间内容为:\nbbb\nccc\nddd

/ddd/{g;s/^\n//;p}  处理到ddd这行后,通过g命令获取保留空间内容到模式空间,通过s替换命令去除开头的\n,p命令打印。

 
sed除了可以将输出重定向到新文件外,加 -i 选项还可以直接改写原文件。
------------------------------------------
也可以通过vim手动编辑。
vim file.txt
光标定位于第二行,即bbb这行

输入命令 3yy ,即向下复制三行
光标定位于第五行,即ddd这行
输入命令 p,粘贴
输入命令 :wq , 保存并退出
全部回答
我也给个思路吧 —— 用sed根据地址范围截取文件内容,用here documents方法添加新的多行内容,然后重组文件。具体步骤如下: 1)截取test.xml文件起始行到行,保存到tmp文件; 2)将要添加的内容根据变量值展开,附加写入tmp文件; 3)截取test.x.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
仲恺农业工程学院的动物科学(动物医学)专业
外滩城市宾馆地址在哪,我要去那里办事
氢,氦为什么不属于金属元素
摩托车打不着火 怎么办 我现在路上求 解决 快
有没有包含“翠竹”的诗句
前几天去杭州一家模特公司面试,收了我培训费
网站(网页)界面设计 用英语怎么说?
美菱燃气热水器打开水和燃气开关,只听见热水
酒干咖啡屋地址有知道的么?有点事想过去
会计继续教育可以用平板电脑学吗
2016安丘新安低保名单
新申请的QQ号,DNF显示被永久封号,怎么解决
ug标准件怎么调入? 比如我先把一套模具分好
机顶盒的灯会亮,但一直打不开
福州市鼓楼区洪山镇大凰山社区居民委员会在哪
推荐资讯
济南九鼎拍卖有限公司广饶业务部在哪里啊,我
绛山东街在哪里啊,我有事要去这个地方
制作手抓饼的番茄酱,辣椒酱在哪里批发
都送过女朋友什么最用心的礼物
鑫金鹏广告·装饰工程处地址在哪,我要去那里
双鱼座有时候很可怕吗
电磁式打点计时器若是接在了直流电源上会出现
建设银行电话挂失是95533吗?
夫妻同床异被好不好?
爱屋吉屋那些失败的创业项目都有哪些共同苗头
咸安区咸宁永安法律服务所我想知道这个在什么
国家电网贤官供电营业厅地址在哪,我要去那里
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?