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

有文本aaabbbcccdddeee匹配bbb-ddd后复制,变为:aaabbbcccdddbbbcccdddeee... 有文本
aaa
bbb
ccc
ddd
eee
匹配bbb-ddd后复制,变为:
aaa
bbb
ccc
ddd
bbb
ccc
ddd
eee
展开
 我来答
百度网友5311d79
推荐于2016-07-29 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3213万
展开全部
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 , 保存并退出

占座专用ID
2014-03-20 · TA获得超过235个赞
知道小有建树答主
回答量:217
采纳率:0%
帮助的人:202万
展开全部
awk '{print $0;}n ~/1/{a=a"\n"$0;}/^bbb/{a=$0;n=1;}/^ddd/{print a;n=0;}' file_name
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式