ファイルにテキストを追加する方法[閉じる]

ファイルにテキストを追加する方法[閉じる]

私はいつもこれらのファイルにテキストを追加します。

echo "text text text ..." >> file
# or
printf "%s\n" "text text text ..." >> file

同じ、よりエレガントな、またはより珍しい方法を達成するためのより多くの方法があるかどうか疑問に思います。

答え1

私はこれが本当に好きです。スクリプトの上部にログファイルを設定し、グローバル変数を必要とせず、ファイル名のすべてのエントリを変更することを覚えておらず、プロセス全体でログファイルに書き込むことができます。

exec 3>> /tmp/somefile.log
...

echo "This is a log message" >&3
echo "This goes to stdout"
echo "This is written to stderr" >&2

この構成は、書き込み用(追加用、読み取り用 - 一般と同様)のためにexec 3>destファイルを開き、ファイル記述子#3に追加します。次に記述子#1を取得します。dest>><標準出力、#2は標準エラーそして、この記事の新しい#3ですdest

あなたは参加できます標準エラー到着標準出力- などの構文を使用して、exec 2>&1スクリプト期間内に強力な可能性がたくさんあります。文書(man bash)には、これについて次のような内容が記載されています。

exec [-cl] [-a name] [command [arguments]]指定した場合はcommandシェルを置き換えます。 [...]指定しないと、commandすべてのリダイレクトが現在のシェル[...]に適用されます。

答え2

ファイルにテキストを追加するいくつかの方法は次のとおりです。

  1. Tシャツを使う

    tee -a file <<< "text text text ..."
    
  2. awkを使う

    awk 'BEGIN{ printf "text text text ..." >> "file" }'
    
  3. sedを使う

    sed -i '$a text text text ...' file
    sed -i -e "\$atext text text ..." file
    

源泉:

答え3

使うhere-document方法:

cat <<EOF >> file
> foo
> bar
> baz
> EOF

テスト:

$ cat file
aaaa
bbbb

$ cat <<EOF >> file
> foo
> bar
> baz
> EOF

$ cat file
aaaa
bbbb
foo
bar
baz

答え4

Unixファイルエディタを使用してください。GNUBSDバージョンの両方。

ed(1)そして使用printf

printf '%s\n' '$a' 'foo bar baz' . w | ed -s file.txt

bashに特化していますが、もっと難解な構文、$' 'シェル引用、herestring

ed -s file.txt <<< $'$a\nfoo bar baz\n.\nw'

ex(1)そして使用printf

printf '%s\n' '$a' 'foo bar baz' . x | ex -s file.txt

$' 'bashに特化していますが、シェル引用のためのもう少し難解な構文とherestring

ex -s file.txt <<< $'$a\nfoo bar baz\n.\nx'

関連情報