我有一堆输出通过 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
使用一个块在最后一行之后运行代码(请参阅迈克尔·杜兰特的回答)。
如果您需要做的只是添加页眉和页脚,只需使用echo
和cat
。
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