常に Linux ターミナルで作業している場合は、検索コマンドと置換コマンドを使用してテキスト ファイルをすばやく編集する必要がある場合があります。これらの操作は、効率を向上させ、テキスト ファイルの管理に費やす時間を短縮するための鍵となります。この記事では、Linux ターミナルで簡単なコマンドを使用してテキストを検索および置換し、テキスト編集をより速く、より柔軟に行うための最も代表的な方法について学びます。
各行を手動で確認して構成ファイルを編集したり、大きなドキュメントを更新したりすると、非常に時間がかかることがあります。ただし、sed、awk、Vim などのコマンド ライン ツールを使用すると、検索と置換のプロセスを高速かつ効率的に行うことができます。
目次
トグルsedコマンドを使用する
テキストを簡単に置換したいですか? sedコマンドを使用します。 sed コマンドを使用すると、ファイル内のテキストを検索および変更し、単純な置換から複雑なテキスト操作まであらゆる操作を行うことができます。
「Linux」という単語を含む example.txt という名前のファイルがあり、それを「Windows」に置き換えることにするとします。これを行うには、次を実行します。
sed 's/Linux/Windows/g' example.txt
ここで、s フラグは置換を示し、g フラグにより sed は各行のパターンのすべての出現を置換できます。
前のコマンドは、元のファイルを直接変更しません。変更された出力がターミナルに表示されるだけです。ただし、元のファイルを直接処理したい場合は、 -i フラグを使用します。
sed -i 's/Linux/Windows/g' example.txt
-i フラグを使用すると、出力を表示するだけでなく、ファイルに直接変更が加えられます。
変更を加える前にファイルをバックアップしたいですか? -i フラグに拡張子を追加します。
sed -i.bak 's/Linux/Windows/g' example.txt
これにより、変更を加える前に、example.txt.bak というバックアップ ファイルが作成されます。
しかし、元のファイルを変更しないでおきたい場合はどうすればよいでしょうか?リダイレクト演算子を使用して、新しいファイルを作成し、変更した出力をそのファイルに保存できます。
たとえば、出力を別のファイルに送信するには、次を使用します。
sed 's/Linux/Windows/g' example.txt > file.txt
sed で複雑な正規表現パターンを使用すると、コンテンツが繰り返される大きなファイルでどの要素を置き換えるかを制御できます。単一のコマンドで複数のコピーを置き換えるには、次を実行します。
sed -i 's/Linux\|Ubuntu/Windows/g' example.txt
sed で私がよく使うテクニックの 1 つは、検索文字列または置換文字列にスラッシュが含まれている場合に、別の区切り文字に切り替えることです。たとえば、ファイル パスを扱うときは、区切り文字として @ 記号を使用するのが好きです。
sed 's@old/path@new/path@g' file.txt
これにより読みやすくなり、多くのエスケープ文字を使用する必要がなくなります。
awk コマンドを使用してテキストを置換する
sed と同様に、awk も単純なテキスト処理から高度なテキスト処理までを実行します。私はよく awk を使用して構造化データ、特に特定のフィールドの計算が必要な CSV ファイルを操作します。
awk は構造化データの管理で最もよく知られていますが、迅速な検索と置換のタスクにも効果的です。たとえば、ファイル内の特定のテキストを置換するには、次を使用できます。
awk '{gsub(/Windows/, "Linux"); print}' file.txt > new_file.txt
ここで、gsub 関数はグローバル置換を実行し、ファイル内のすべての行で出現するすべての「Windows」を「Linux」に置き換えます。 awk はファイルを直接変更しないため、出力を new_file.txt にリダイレクトして変更をキャプチャします。
また、私は awk を使用して、特にスプレッドシートからのデータ エクスポートをクリーンアップします。追加の書式設定によりデータ処理が複雑になる可能性があります。多くのスプレッドシートのエクスポートには値の前後に引用符が含まれているため、他のアプリケーションでのデータ処理が中断される可能性があります。
次のコマンドを使用して、CSV ファイルの最初の列からすべての二重引用符を削除できます。
awk -F, '{gsub(/"/, "", $1); print}' data.csv > clean_data.csv
ここで、gsub は最初の列のみからすべての二重引用符を削除し、出力はさらに使用できるように Cleaning_data.csv ファイルにリダイレクトされます。
Vim Ex モードを使用してテキストを置換する
完全なエディターを開かずに高速テキスト変換を行いたいですか? Vim (Vi 改良版) は、コマンド ラインから直接検索と置換を実行できる Ex モードを備えたテキスト エディターです。
まず、Vim でファイルを開きます。
vim ファイル名.txt
次に、Esc キーを押して Ex モードに入り、(:) キーを使用します。これにより、ターミナルの下にコロン (:) が表示され、Ex モードであることが示されます。テキストを検索して置換するには、次のコマンドを使用します。
:%s/macOS/Linux/g
このコマンドは、ファイル全体で出現するすべての「macOS」を「Linux」に置き換えます。 % 記号は、コマンドがファイル全体に適用されることを示し、g フラグは、最終的に、最初に出現したものだけでなく、各行のすべての出現が置換されることを保証します。
各行の最初の出現箇所のみを置換するには、単に g フラグを削除します。
:%s/macOS/Linux/
特定の行範囲内のテキストを置換する必要がありますか?行範囲を指定します。たとえば、テキストを 3 行目から 10 行目に置換するには、次のようにします。
:3,10s/macOS/Linux/g
ファイルに変更を加えるときの私の習慣の 1 つは、置き換えられるたびに確認することです。このアプローチにより、行ごとに微調整を行うことができます。
各置換の通知を取得するには、コマンドの最後に c を追加します。
:%s/macOS/Linux/gc
Bash スクリプトを使用する
場合によっては、複数のファイルまたはディレクトリにわたって一連の検索および置換操作を実行する必要がある場合があります。このような場合、Bash スクリプトを使用すると、手動で完了するには時間がかかるタスクを自動化できます。
現在のディレクトリ内の複数のテキスト ファイル内の古い文字列を新しい文字列に置き換える単純なスクリプトを考えてみましょう。
#!/bin/bash
for file in *.txt; do
sed -i 's/Windows/Linux/g' "$file"
done
このスクリプトを使用するには、まずスクリプトをファイル (bashexample.sh など) に保存し、次に次のコマンドを実行してファイルを実行可能にします。
chmod +x bashexample.sh
次に、次を使用してスクリプトを実行します。
./bashexample.sh
for ループは、現在のディレクトリ内のすべてのテキスト ファイルを反復処理し、sed を使用して各ファイル内のテキストを置き換えます。必要に応じて、このスクリプトを変更して、さまざまなファイル スタイルやタイプを処理することもできます。
Python スクリプトを使用してテキストを置換する
Python の高度なテキスト処理機能のおかげで、ファイルの検索および置換タスクをターミナルから直接実行できます。 Python スクリプトは、条件付きロジックを使用して複数のファイルを処理するなど、より複雑な操作が必要な場合に便利です。
まず、新しい Python ファイルを作成します。 nano や Vim などのテキスト エディタを使用できます。
vim テキストファイル.py
次に、次の Python スクリプトをファイルに追加します。
#!/usr/bin/env python
import sys
with open(sys.argv[1], 'r+') as f:
content = f.read().replace('Windows', 'Linux')
f.seek(0)
f.write(content)
f.truncate()
ファイルを保存した後、次のコマンドを実行して実行可能にします。
chmod +x ./testfile.py
次に、ターゲット ファイルをコマンド ライン引数として渡してスクリプトを実行します。
python3 ./testfile.py input.txt
このスクリプトは、input.txt の内容を読み取り、古いテキストを新しいテキストに置き換え、変更をファイルに直接保存します。
tr コマンドを使用して文字グループを置換する
ファイル全体で 1 文字だけを別の文字に置き換える必要があったことがありますか? 「はい」の場合は、tr コマンドを試す必要があります。このコマンドは、単に文字を置換または削除する場合に最適です。
たとえば、テキスト ファイル内の特定の文字を大文字または小文字に変換するためによく使用します。テキスト ファイル内のすべての小文字の a と d を大文字の a と d に置き換えるには、次のコマンドを実行します。
tr 'a,d' 'A,D' < example.txt
tr コマンドは文字列や単語ではなく文字に作用するため、複雑なパターンではなく単純な文字を置換するのに最適であることに注意してください。
これを実行して、空白をクリーンアップしたり、行末を標準化することもできます。
猫の乱雑なファイル.txt | tr '\r' '\n' > clean_file.txt
これにより、Windows スタイルの行末記号 (\r\n) が Unix スタイルの行末記号 (\n) に変換されます。これは、異なるオペレーティング システム間でファイルを操作する場合に便利です。
Perlを使用する
高級プログラミング言語である Perl は、ターミナル内で直接使用してテキストを検索および置換することもできるため、sed の優れた代替手段となります。その構文構造は sed に似ていますが、より高度な機能を提供します。
私は個人的に Perl がとても気に入りました。正規表現の特に強力な機能があり、複雑な検索および置換操作に最適なためです。
次のコマンドを使用して、ファイル内の任意の単語を置換できます。
perl -pi -e 's/Linux/Windows/g' file.txt
ここで、-pi フラグは Perl プログラムにファイルをその場で編集するように指示し、-e フラグを使用すると式を直接渡すことができます。このコマンドは、ファイル全体の「Linux」を「Windows」に置き換えることにより、file.txt を変更します。
単純な置き換えの場合は、sed、awk、perl などのコマンド ライン ツールが適切に機能します。複数のファイルにわたる、または追加のロジックを使用してより複雑な置換を実行する必要がある場合は、Bash または Python スクリプトを選択します。
Linux ターミナルでのテキストの検索と置換をマスターすることは、ワークフローを改善して時間を節約したい Linux ユーザーにとって不可欠なスキルです。この記事で説明したツールとコマンドを使用すると、ユーザーは、サイズの大小を問わず、テキスト ファイルを簡単かつ迅速に変更できます。これらの簡単なコマンドを使用して、システムのパフォーマンスを向上させてください。











