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
。ㅏ最後の行の後にお待ちください。構文は$'…'
bash によって異なります。他のシェルでは、次の方法でこれを実行できます。
sed -e '1i\ Enter start' -e '$a\ Enter end'Enter
警告:質問には「たくさんの出力があります...」と表示されます。データなしで上記のコマンドを実行すると、コマンドは実際にはそれに依存するため、どの出力も得られません。存在する 最初の行と最後の行。他の2つの答えは、入力が空であってもヘッダーとフッターを提供します。
答え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