タスクは簡単です。 Linuxターミナルのテキストファイルから特定の行を削除する必要があります。
VimやNanoなどのテキストエディタを使用して、ファイルを入力し、目的の行を削除できます。ただし、このアプローチは、bashスクリプトを使用した自動化には適していません。
代わりに、強力なsedコマンドラインエディターを使用して、特定の条件に一致する行を削除できます。そしてもちろん、シェルスクリプトでsedを使用することもできます。
いくつかの使用例を示しましょう。
⚠️ここに示す例は、元のファイルを即座に変更します。実験を開始する前に、そのファイルのバックアップを作成することをお勧めします。ファイルの7行目の行番号を削除する必要があるとします。次のようにsedコマンドを使用できます:
sed -i '7d' filename
それがどのように機能するかを説明させてください:
-
-i
:このオプションは、インプレース編集を有効にします。デフォルトでは、sedは出力のみを表示します。この-i
で オプションの場合、実際のファイルをディスプレイに表示せずに変更します。 -
7d
:ここで7は行番号とd
行の削除を指示します。 filename
:これは変更したいファイルです。ファイルが他のディレクトリにある場合は、絶対パスまたは相対パスを指定することもできます。
実際の例を示しましょう。これがagatha.txtという名前のサンプルテキストファイルです:
The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
Giant's Bread
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
このファイルから4行目を削除するには、次を使用します。
sed '4d' agatha.txt
これにより、「Giant'sBread」という行が削除された次の表示になります:
The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
ここで、Linuxコマンドラインでファイルの最初の行を削除するとします。このようにsedを使用します:
sed -i '1d' filename
💡ファイル自体を変更せずに操作の結果を確認したい場合は、-i
を使用しないでください sedコマンドのオプション。 sedを使用して最後の行を削除します
特定の行を削除することを学びましたが、最後の行を削除する必要がある場合はどうなりますか?
wcコマンドを使用してファイル内の合計行数を常に取得し、この数をsedで使用できます。ただし、sedには、ファイルの最後の行を削除する専用の方法があります。もうファイルの数を気にする必要はありません。
sed -i '$d' filename.txt
前に見たのと同様に、ファイルから一定範囲の行を削除することもできます。
11から15までの行を削除する必要があるとすると、次のような範囲を指定できます。
sed -i '11,15d' filename
11行目と15行目だけでなく、それらの間にある行も削除されることに注意してください。
sedを使用して、特定の文字列を含む、または特定のパターンに一致するすべての行を削除することもできます。
次のコマンドは、「文字列」という単語を含むすべての行を削除します:
sed -i '/string/d' filename
これは大文字と小文字を区別する検索であることに注意してください。通常の文字列の代わりに正規表現パターンを使用することもできます。
特定の単語または文字で始まるすべての行を削除する場合は、次のような正規表現パターンを指定する必要があります。
sed -i '/^word/d' filename
ボーナスのヒント:空の行をすべて削除します
この記事を終了する前に、sedを使用してすべての空の行を削除する方法を簡単に説明します:
sed -i '/^$/d' filename
このクイックヒントが、Linuxコマンドラインのテキストファイルから行を削除するのに役立つことを願っています。
興味がある場合は、sedコマンドラインエディタの詳細をご覧ください: