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

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

我有一堆输出通过 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

答案1

这有效,如所示杰森·瑞安:

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

答案2

sed这可以通过以下方式完成

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

1i方法在第 1 行之前插入; $a方法A挂在最后一行之后。语法$'…'是 bash 特定的。在其他 shell 中,您应该能够通过以下方式执行此操作:

sed -e '1i\Enter
开始' -e '$a\Enter
结束'Enter

警告:问题说“我有一堆输出...”如果您在没有数据的情况下运行上述命令,您将不会得到任何输出,因为该命令实际上取决于那里存在 第一行和最后一行。即使输入为空,其他两个答案也会给出页眉和页脚。

答案3

如果您已经在使用 sed,则可以使用1来匹配第一行和$匹配最后一行(请参阅斯科特的回答)。如果您已经在使用 awk,则可以使用一个BEGIN块在第一行之前运行代码,并END使用一个块在最后一行之后运行代码(请参阅迈克尔·杜兰特的回答)。

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

echo START
cat
echo END

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

content-generator |
{ echo START; cat; echo END; } |
postprocessor

答案4

sed -e '1s/.*/START\n&/g' -e '$s/.*/&\nEND/g' filename

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

Python

#!/usr/bin/python
k=open('filename','r')
o=k.readlines()
for i in range(0,len(o),1):
    if ( i == 0 ):
        print "START"
        print o[i].strip()
    elif ( i == (len(o)-1)):
        print o[i].strip()
        print "END"
    else:
        print o[i].strip()

输出

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

相关内容