たとえば、テキストファイルがありますtext
。
私がやりたいのは、テキストファイルをパイプに入れることです(のようにcat text |
)が、上下に行が追加されていますが、新しいファイルを作成したり(ファイルが少しtext
大きいため)変更したりすることはありません。
それは可能ですか?私は考えecho $(echo "line"; cat text; echo "line")
ていましたが、それは好きではありません。
マンバッシュから:
(リスト)リストはサブシェル環境で実行されます(以下のコマンド実行環境を参照)。シェルの環境に影響を与える変数の割り当てと組み込みコマンドは、コマンドの完了後も有効なままではありません。戻りステータスは、リストの終了ステータスです。
したがって、これは機能するはずです。
(echo first line; cat file; echo last line) | some_command
chepnerが提案しているように、サブシェルが必要ない場合は、の{}
代わりに使用できます()
。この場合、;
はグループ内の最後のコマンドを含めて必須です。
コメントの中で、Pyrolisticalは、ファイルの代わりに着信パイプがある場合にもこれが機能することを覚えています。
some_program | (echo first line; cat -; echo last line) | some-other-command
多くのUNIXコマンドラインアプリケーションと同様に、のファイル名引数がcat
「-
標準入力からの読み取り」を意味する場合。
この質問からコピーすべてのテキストファイルの上下に新しい行を追加します。
cat text |sed -e '1 i beginning_line'| sed -e '$s@$@\nending_line@' |
うまくいくようです。
パイプ出力に行を追加し、上部に行を追加します:(ソース-@Karel Bilekのコメント)
cat text.txt | sed -e '1 i my first line'
下部に行を追加します:(ソース-https: //askubuntu.com/a/968585)
cat text.txt | sed -e '$a my last line'
例:一重引用符でこれを試してください
cat text.txt | sed -e '1 i my first line' | sed -e '$a my last line'
出力:
my first line
this is
my
text
file
my last line