我想在第一个字符串搜索之后添加两行。我正在使用:
$ 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它给出了以下输出。
HAI
LINE ONE LINE TWO
BYE
HAI
ONE
TWO但我希望输出是:
HAI
LINE ONE
LINE TWO
BYE
HAI
ONE
TWO我如何才能做到这一点?我试图保留\n但它给出了错误。
发布于 2012-02-26 14:32:03
使用以下命令替换您的sed命令:
sed $VAR' a\
LINE ONE\
LINE TWO
' file1顺便说一句,在您之前的grep中,awk也可以简化为:
VAR=$(awk '$1 == "HAI" && NR==1{print NR}' file1)更好的是在单个awk命令中获得完整的答案,如下所示:
awk '{if ($1=="HAI" && done!=1) {done=1; printf("%s\nLINE ONE\nLINE TWO\n", $0);} \
else print $0}' file1输出:
HAI
LINE ONE
LINE TWO
BYE
HAI
ONE
TWO发布于 2012-02-26 15:33:16
$ sed '/HAI/{s/.*/&\nLINE ONE\nLINE TWO/;:a;n;ba}' file1
HAI
LINE ONE
LINE TWO
BYE
HAI
ONE
TWO解释:
/HAI/搜索此patterns/.*/&\nLINE ONE\nLINE TWO/追加两个lines:a定义一个label(a)n读取下一个lineba跳转到标签(A)您可以使用a命令而不是s
$ sed '
> /HAI/{
> a\
> LINE ONE\
> LINE TWO
> :a
> n
> ba
> }' file1发布于 2012-02-26 16:32:58
这可能会对你有用(枪声):
sed '0,/HAI/a\LINE ONE\nLINE TWO' file或者这个(任何sed):
sed 'x;/./{x;b};x;/HAI/!b;h;a\LINE ONE\nLINE TWO' filehttps://stackoverflow.com/questions/9450910
复制相似问题