Bashスクリプトを作成するとき、またはLinuxコマンドラインで作業するときの最も一般的なタスクの1つは、ファイルの読み取りと書き込みです。
この記事では、リダイレクト演算子と tee を使用して、Bashでファイルにテキストを書き込む方法について説明します。 コマンド。
リダイレクト演算子を使用したファイルへの書き込み#
Bashでは、出力のリダイレクトにより、コマンドからの出力をキャプチャしてファイルに書き込むことができます。
出力をファイルにリダイレクトおよび書き込むための一般的な形式は次のとおりです。
output > filename
output >> filename
-
>リダイレクト演算子は、出力を特定のファイルに書き込みます。ファイルが存在する場合は、長さがゼロに切り捨てられます。それ以外の場合は、ファイルが作成されます。重要なファイルを上書きする可能性があるため、この演算子を使用する場合は特に注意してください。 >>コード> リダイレクト演算子は、出力を指定されたファイルに追加します。ファイルが存在しない場合は作成されます。
ファイルへの書き込み権限が必要です。そうしないと、許可拒否エラーが発生します。
これは、 echoの出力をリダイレクトする方法を示す簡単な例です。 ファイルへのコマンド:
echo "this is a line" > file.txt
既存のファイルの上書きを防ぐには、 setで「noclobber」オプションを有効にします 組み込み:
set -o noclobberecho "this is a line" > file.txt
bash: file.txt: cannot overwrite existing file
>|コード> 演算子を使用すると、Bashの「noclobber」オプションをオーバーライドできます。
set -o noclobberecho "this is a line" >| file.txt
>>コード> オペレーターは、ファイルを上書きするのではなく、ファイルの最後に出力を追加します。
echo "this is a line" >> file.txt
printfを使用します 複雑な出力を作成するコマンド:
printf "Hello, I'm %s.\n" $USER > file.txt ファイルに複数行を書き込む場合は、ヒアドキュメント(Heredoc)リダイレクトを使用します。
たとえば、コンテンツを catに渡すことができます コマンドを実行してファイルに書き込みます:
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
行を追加するには、>を変更します >>を使用 ファイル名の前:
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
任意のコマンドの出力をファイルに書き込むことができます:
date +"Year: %Y, Month: %m, Day: %d" > file.txt
dateの出力 コマンドがファイルに書き込まれます。
teeを使用してファイルに書き込む コマンド#
tee コマンドは標準入力から読み取り、標準出力と1つ以上のファイルの両方に同時に書き込みます。
echo "this is a line" | tee file.txt
tee コマンドのデフォルトの動作は、> と同じように、指定されたファイルを上書きすることです。 オペレーター。出力をファイルに追加するには、 -aを指定してコマンドを呼び出します。 (-追加 )オプション:
echo "this is a line" | tee -a file.txt
teeが必要ない場合 標準出力に書き込むには、 / dev / nullにリダイレクトできます。 :
echo "this is a line" | tee file.txt >/dev/null
テキストを複数のファイルに書き込むには、ファイルを teeの引数として指定します コマンド:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
teeのもう1つの利点 コマンドは、 sudoと組み合わせて使用できることです。 他のユーザーが所有するファイルに書き込みます。書き込み権限がないファイルにテキストを追加するには、 sudoを先頭に追加します teeの前 :
echo "this is a line" | sudo tee file.txt
echo コマンド出力は、入力として teeに渡されます 、sudo権限を昇格させ、テキストをファイルに書き込みます。
結論#
Linuxでは、ファイルにテキストを書き込むには、>を使用します および>> リダイレクト演算子またはtee コマンド。