首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sed中添加两个连续的行

在sed中添加两个连续的行
EN

Stack Overflow用户
提问于 2012-02-26 13:49:48
回答 3查看 3.8K关注 0票数 2

我想在第一个字符串搜索之后添加两行。我正在使用:

代码语言:javascript
复制
$ cat file1
HAI
BYE
HAI
ONE
TWO

$ VAR=`cat -n file1 |grep -w HAI |head -1 |awk '{print $1}'`
$ sed "$VAR a\
LINE ONE \
LINE TWO
" file1

它给出了以下输出。

代码语言:javascript
复制
HAI
LINE ONE LINE TWO
BYE
HAI
ONE
TWO

但我希望输出是:

代码语言:javascript
复制
HAI
LINE ONE 
LINE TWO
BYE
HAI
ONE
TWO

我如何才能做到这一点?我试图保留\n但它给出了错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-26 14:32:03

使用以下命令替换您的sed命令:

代码语言:javascript
复制
sed $VAR' a\
LINE ONE\
LINE TWO
' file1

顺便说一句,在您之前的grep中,awk也可以简化为:

代码语言:javascript
复制
VAR=$(awk '$1 == "HAI" && NR==1{print NR}' file1)

更好的是在单个awk命令中获得完整的答案,如下所示:

代码语言:javascript
复制
awk '{if ($1=="HAI" && done!=1) {done=1; printf("%s\nLINE ONE\nLINE TWO\n", $0);} \
      else print $0}' file1

输出:

代码语言:javascript
复制
HAI
LINE ONE
LINE TWO
BYE
HAI
ONE
TWO
票数 4
EN

Stack Overflow用户

发布于 2012-02-26 15:33:16

代码语言:javascript
复制
$ sed '/HAI/{s/.*/&\nLINE ONE\nLINE TWO/;:a;n;ba}' file1
HAI
LINE ONE
LINE TWO
BYE
HAI
ONE
TWO

解释:

  • /HAI/搜索此pattern
  • s/.*/&\nLINE ONE\nLINE TWO/追加两个lines
  • :a定义一个label(a)
  • n读取下一个line
  • ba跳转到标签(A)

您可以使用a命令而不是s

代码语言:javascript
复制
$ sed '
> /HAI/{
> a\
> LINE ONE\
> LINE TWO
> :a
> n
> ba
> }' file1
票数 2
EN

Stack Overflow用户

发布于 2012-02-26 16:32:58

这可能会对你有用(枪声):

代码语言:javascript
复制
sed '0,/HAI/a\LINE ONE\nLINE TWO' file

或者这个(任何sed):

代码语言:javascript
复制
sed 'x;/./{x;b};x;/HAI/!b;h;a\LINE ONE\nLINE TWO' file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9450910

复制
相关文章

相似问题

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