ディレクトリ内のすべてのファイルの先頭に行を追加します。

ディレクトリ内のすべてのファイルの先頭に行を追加します。

ディレクトリ内のすべてのファイルの先頭に2行を追加しようとしています。

以下を使用して、単一のファイルに対してこれを実行できます。

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

最初に2行を追加する方法みんなディレクトリにファイルがありますか?

答え1

まず、コマンドは次のようになります。

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

これは強くお勧めしません。 ファイルにバックスラッシュが含まれていると問題が発生します。引用符とコマンドの置き換えをお読みください。


単一ファイルの場合、ファイルの先頭に行を挿入する推奨 POSIX 方法は次のとおりです。

printf '%s\n' 0a 'First line' '2nd line; 3rd line is empty' '' . x | ex file.txt

0a「0行の後に追加」を意味します。これはexPOSIXファイルエディタ(他の形式のエディタでもあります)のコマンドですvi。行.自体の末尾に追加されます。 x保存と終了。

複数のファイルを一度に処理するには、ループforとファイルグローブを使用してください。

for f in *.txt; do
  printf '%s\n' 0a '# This line heads all files' . x | ex "$f"
done

答え2

sedプラットフォームが以下を使用して内部編集をサポートしている場合

sed -i "1i\\
First line\\
$(date)" *

残念ながら、この部分はsed少し薄暗いです。文書内の正確な構文を把握するのに苦労した記憶があります。

答え3

perl -i -lpe '
   $FNR++ or print "% First Line\n%", `date`, $\;
   $FNR = 0 if eof;
' *.txt

各ファイルの最初の入力行にのみ必要な文字列を印刷します。ステートメントが要求するように改行を追加しますORS $\printecho

関連情報