1. 概要

Linuxでファイルを処理する場合、ある時点でそれらの一部を空にする必要があるのが一般的です。 ログファイルは、時々それらをクリアしたい良い例です。

このチュートリアルでは、いくつかの実用的な例を通して、それを達成するためのいくつかの方法を見ていきます。

2. サンプルファイルの作成

始める前に、original_fileというファイルを作成しましょう。このファイルには数行のテキストが含まれています。

$ cat << eof > original_file
one two
three four
eof

次に、作業するコピーとなる別のコピーを作成します。

$ cp original_file example_file

各シナリオをテストした後、ファイルを補充するためにこれを行う必要があります。

3. シェル固有のコマンドの使用

まず、使用しているシェルの特定の特性を使用できます。

たとえば、Bashを使用している場合は、>文字を入力するだけです。

$ > example_file

組み込みのコロンの使用:

$ : > example_file

または、 true ビルトイン:

$ true > example_file

ただし、Zshでは、2つのアプローチをすばやく利用することしかできません。

$ : > example_file
$ true > example_file

どちらも何もせず、終了ステータス0を返します。

それでは、次のことを試してみましょう。

$ > example_file

そして何も起こりません:シェルは入力を期待します。 ただし、 ctrl + d を押すと、ファイルの終わりが送信され、最後にファイルのサイズをチェックして、ファイルにコンテンツがないことを確認できます。

clobberおよびnoclobberオプションがあるため、これを(コロンの有無にかかわらず)行うことができます。 それ以外の場合は、次のメッセージを受け取ります。

zsh: file exists: example_file

このシナリオでは、次のような方法で解決できます。

  • setopt clobber と入力して、過去の戦略を再試行してください
  • unsetopt noclobber と入力して、再試行してください
  • を使用して 後に >> 私たちの過去の戦略のいくつかにおける性格-例えば、 :>! example_file

4. 空の文字列を送信する

この問題を解決する別の方法は、空の文字列をファイルに送信することです。

これは、echoコマンドを使用して実現できます。

$ echo -n > example_file

ここでは、 -n パラメーターを使用して、echoがデフォルトで追加する改行を追加しないようにします。

printfコマンドを使用することもできます:

$ printf '' > example_file

もう1つの方法は、ヒアドキュメントを使用して文字列を指定することです。たとえば、EOFとしましょう。

$ cat << EOF > example_file

待って、書くだけ EOF 、次にを押します 。

5. 特定のサイズを使用する

ファイルの内容を削除する別の方法は、ファイルサイズをゼロに設定することです。

truncateコマンドでそれを試してみましょう。

$ truncate -s 0 example_file

ddコマンドを使用してこの問題に取り組むこともできます。

$ dd if=/dev/urandom of=example_file bs=1 count=0

前のアプローチでは、 / dev / urandom ファイルを使用しましたが、 count パラメーターがゼロである限り、どのファイルでも使用できます。違いはありません。

6. / dev /nullを使用する

/ dev / nullファイルは、書き込みを行うとそこに送信されたものを破棄できるため、または読み取りを行うとファイルの終わりを返すため、非常に便利で快適です。 。

/ dev /nullファイルをddコマンドで使用してみましょう。

$ dd if=/dev/null of=./example_file

catでも同じことができます。

$ cat /dev/null > example_file

またはcpを使用:

$ cp /dev/null example_file

7. awkおよびsedを使用

sed は、問題を解決するために使用できる便利で強力なツールです。

$ sed -i 'd' example_file

パラメータ-iを使用して、すべての変更がファイル内で行われることをsedに指示します。

d コマンドを使用して、sedに行全体を削除するように指示します。 sed はこのレコードをレコードごとに実行するため、最終的なファイルは空になります。

GNU Awk を使用すると、同様のことが実現できます。

$ gawk -i inplace '0' example_file

ゼロはawkfalseとして評価されるため、 awk は、「 0 」を返すことにより、すべての入力行を無視するように強制します。次に、空を入力ファイルに保存します。

GNU Awkのバージョン4.1.0以降を使用している場合にのみ、「-iinplace」オプションを使用できます。 の場合所定の位置に拡張機能はAwkでは使用できませんが、一時ファイルを使用して使用できます。

$ awk '0' example_file > tmp_file && mv tmp_file example_file

これらの戦略では、ファイル名を維持しながら、iノード番号を変更することにも注意してください。 また、ファイルをチェックするので遅いです。

8. 結論

Linuxで作業する場合、ファイルを空にすることは一般的なタスクです。

このチュートリアルでは、シェル固有のコマンドやその他のツールを使用してコンテンツを空にするさまざまな方法を検討しました。