如何在sed或awk流中添加页眉和/或页脚?


13

我有一堆输出通过sed和awk。

如何在输出前加上START前缀并在END后加上答案?

例如,如果我有

All this code
on all these lines
and all these

我如何获得:

START
All this code
on all these lines
and all these
END

我的尝试是:

awk '{print "START";print;print "END"}'

但是我得到了

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END

Answers:



11

这可以sed

sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

1i表示在第1行之前插入;$a意味着一个最后的行之后PPEND。该$'…'语法是bash的特异性。在其他shell中,您应该能够执行以下操作:

sed -e'1i \ Enter
START'-e'$ a \ Enter
END'Enter

8

如果您已经在使用sed,则可以使用1来匹配第一行并$匹配最后一行(请参见Scott的答案)。如果您已经在使用awk,则可以BEGIN在第一行之前使用一个块来运行代码,而END在最后一行之后使用一个块来运行代码(请参阅Michael Durrant的答案)。

如果您只需要添加页眉和页脚,请使用echocat

echo START
cat
echo END

在管道中,要运行多个命令,请使用{ … }告诉解析器它们是单个复合命令。

content-generator |
{ echo START; cat; echo END; } |
postprocessor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.