GNU/Linux >> Linux の 問題 >  >> Linux

Grep、Sed、およびAwkを使用してファイル内の空の行を削除する方法

経験豊富なLinuxユーザーは、処理可能なファイルにどのような迷惑な空白行が含まれる可能性があるかを正確に知っています。これらの空/空白行は、そのようなファイルを正しく処理するのを妨げるだけでなく、実行中のプログラムがファイルを読み書きするのを困難にします。

Linuxオペレーティングシステム環境では、ファイルからこれらの空/空白行を取り除くために、いくつかのテキスト操作式を実装することが可能です。この記事では、空/空白行は空白文字を指します。

Linuxで空/空白行を含むファイルを作成する

空/空白行を含む参照ファイルを作成する必要があります。後で、これから説明するいくつかの手法を使用して、記事で修正します。ターミナルから、「 i_have_blanks」のような名前で任意のテキストファイルを作成します 」と入力し、データと空白を入力します。

$ nano i_have_blanks.txt
Or
$ vi i_have_blanks.txt

記事全体を通して、柔軟な参照のためにcatコマンドを使用して、端末にファイルの内容を出力します。

$ cat i_have_blanks.txt

この空/空白行の問題の理想的な解決策に向けて私たちを駆り立てる3つのLinuxコマンドは、grep、sed、および awk です。 。

したがって、 i_have_blanks.txtのコピーを3つ作成します。 記載されている3つのLinuxコマンドのいずれかでそれぞれに対応できるように、ファイルを作成して異なる名前で保存します。

正規表現を介して (正規表現 )、POSIX標準文字“[:space:]”で空白行を識別できます 。

ファイルの空白/空行を削除する方法

この問題ステートメントでは、次のコマンドを使用して、特定の読み取り可能なファイルから既存の空/空白行をすべて削除することを検討しています。

1。 Grepコマンドを使用して空の行を削除する

サポートされている短縮文字クラスの使用により、grepコマンドを次のような単純なコマンドに減らすことができます。

$ grep -v '^[[:space:]]*$' i_have_blanks.txt
OR
$ grep '\S' i_have_blanks.txt

空白/空の行を含むファイルを修正するには、元のファイルを上書きする前に、上記の出力が一時ファイルを通過する必要があります。

$ grep '\S' i_have_blanks.txt > tmp.txt 
$ mv tmp.txt i_have_blanks.txt
$ cat i_have_blanks.txt

ご覧のとおり、このテキストファイルのコンテンツの間隔を空けていた空白行はすべてなくなっています。

2。 Sedコマンドを使用して空の行を削除する

d コマンドのアクションは、ファイルから既存の空白を削除するように指示します。このコマンドの空白行の照合と削除のメカニズムは、次のように表すことができます。

$ sed '/^[[:space:]]*$/d' i_have_blanks_too.txt

上記のコマンドは、テキストファイルの行をスキャンして空白以外の文字を探し、残りのすべての文字を削除します。空白以外の文字クラスのサポートにより、上記のコマンドは次のように簡略化できます。

$ sed '/\S/!d' i_have_blanks_too.txt

また、コマンドのインプレース編集サポートにより、grepコマンドの場合のように、元のテキストファイルを上書きする前に、変換されたファイルを一時的に保持するための一時ファイルは必要ありません。ただし、このコマンドは-iで使用する必要があります 引数としてのオプション。

$ sed -i '/\S/!d' i_have_blanks_too.txt i_have_blanks_too.txt 
$ cat i_have_blanks_too.txt

3。 Awkコマンドを使用して空の行を削除する

awkコマンド ファイルの各行に対して白以外の文字チェックを実行し、この条件が真の場合にのみそれらを出力します。このコマンドの柔軟性には、さまざまな実装ルートがあります。その簡単な解決策は次のとおりです。

$ awk '!/^[[:space:]]*$/' i_have_blanks_first.txt

上記のコマンドの解釈は簡単で、空白として存在しないファイル行のみが印刷されます。上記のコマンドの長いバージョンは、次のようになります。

$ awk '{ if($0 !~ /^[[:space:]]*$/) }' i_have_blanks_first.txt

awkを介して 空白以外の文字クラスのサポートでは、上記のコマンドは次のように表すこともできます。

$ awk -d '/\S/' i_have_blanks_first.txt

-d オプションでawk システム端末に最終ファイル行をダンプします。ご覧のとおり、ファイルには空白がありません。

grepを介してファイルの空白行を処理するための3つのソリューションについて説明および実装しました 、 sed 、および awk コマンドを使用すると、Linuxシステムでファイルの読み取りと書き込みの安定した効率的な操作を実装するのに長い道のりが必要になります。


Linux
  1. Awkおよび正規表現を使用してファイル内のテキストまたは文字列をフィルタリングする方法

  2. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  3. GnuPGを使用してLinuxでファイル/フォルダーを暗号化および復号化する方法

  1. Sedを使用してテキストファイルから複数のランダム行を削除する方法は?

  2. grep でテキスト ファイルの空行を削除する

  3. AWK を使用して 2 つのファイルをマージする方法は?

  1. Unix で空のディレクトリとファイルを見つけて削除する方法

  2. wget vs curl:wget と curl を使用してファイルをダウンロードする方法

  3. Linux で空のディレクトリとファイルを見つけて削除する方法