首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换每2行sed

如何替换每2行sed
EN

Ask Ubuntu用户
提问于 2020-11-09 18:27:42
回答 1查看 696关注 0票数 0

如何将文本文件的第2行替换为另一个文本文件列表。例如:猫filea.txt,我爱粉红,我爱蓝色,我爱猫,我爱莫莫猫,我讨厌叶洛,我讨厌白猫,我讨厌我讨厌猪,现在我需要输出,因为我爱粉红,我爱耶洛,我爱狗,我讨厌老鼠Text胆b应该代替第2行的文本丝线而不附加它。我们如何使用-i和sed或awk来实现这一点。我试着用粘贴的comand来做这件事,而不是用它来代替它。

EN

回答 1

Ask Ubuntu用户

发布于 2020-11-09 18:33:45

使用GNU,您可以使用R命令:

R filename Append a line read from filename. Each invocation of the command reads a line from the file. This is a GNU extension.

所以

代码语言:javascript
复制
$ sed 'R fileb.txt' filea.txt
I love Pink
I hate yello
I love Blue
I hate white
I love Dogs
I hate rats
I love MOMO
I hate pigs

结合d删除原始行:

代码语言:javascript
复制
$ sed -e '2~2{R fileb.txt' -e 'd;}' filea.txt
I love Pink
I hate yello
I love Dogs
I hate white

如果要将filea.txt的第2行替换为fileb.txt的第2行,那么:

代码语言:javascript
复制
$ sed '2~2d' fileb.txt | sed -e '2~2{R /dev/stdin' -e 'd;}' filea.txt
I love Pink
I hate yello
I love Dogs
I hate rats

或者,使用paste并排连接文件的行,然后通过管道将默认的选项卡分隔符更改为仅在奇数行上的换行符:

代码语言:javascript
复制
$ paste filea.txt fileb.txt | sed -n '1~2s/\t/\n/p'
I love Pink
I hate yello
I love Dogs
I hate rats

显然,如果原始的filea.txt可能包含制表符,这是行不通的。

由于您还标记了您的问题awk,所以您也可以考虑如下

代码语言:javascript
复制
awk '{getline x < "fileb.txt"} NR%2 {print; print x}' filea.txt
票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1290954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档