シェル標準出力をファイルの最初の行にリダイレクトする方法は?

シェル標準出力をファイルの最初の行にリダイレクトする方法は?

シェル標準出力はファイルの最後の行にリダイレクトされます。ファイルの最初の行に書き込む方法はありますか?

stdoutの内容は予測不可能なので、stdoutのデフォルトの動作を変更する必要があるかもしれませんが、それが可能かどうかはわかりません。

はい、タイムスタンプをファイルにリダイレクトする

echo `date` >> test.txt

デフォルトではファイルの最後の行に保存

Mon Aug 31 00:40:27 UTC 2020
Mon Aug 31 00:40:28 UTC 2020
Mon Aug 31 00:40:29 UTC 2020
Mon Aug 31 00:40:30 UTC 2020

目的の効果、出力をファイルの最初の行に保存

Mon Aug 31 00:40:30 UTC 2020
Mon Aug 31 00:40:29 UTC 2020
Mon Aug 31 00:40:28 UTC 2020
Mon Aug 31 00:40:27 UTC 2020

よろしくお願いします!

ベストアンサー1

endの代わりに先頭に日付を書きたい場合は、file次のようにします。

{ date; cat file; } >file.new && mv file.new file

議論する

  1. ファイルの先頭に新しいテキストを追加するには、ファイル全体を再作成する必要があります。ファイルの末尾に新しいテキストを追加するには、新しいテキストを作成します。

  2. アンディ・ダルトン提案は、通常どおりファイルの末尾に追加し、それを使用してtac fileファイルを表示することです。これは良い提案です。

  3. echo `date` >> test.txtより簡単で効率的な方法で置き換えることができますdate >> test.txt

    bash 4.3以降を使用している場合は、次の手順を実行します。チャールズ・ダフィーprintf '%(%c)T\n' -1 >>test.txtより効果的だと指摘しました。

  4. 校正器の周りのスペースは非常に重要です。これは{、両方とも}シェルだからです。予約語(シェルに相対的キーワードスペースは必要ありません)。

おすすめ記事