Linuxの検索と置換の例

Linuxの検索と置換の例

私は最近、ネストされたサブディレクトリ内にあるたくさんの設定ファイルに現れるテキストを変更しなければならない状況にありました。 10年前のperlスキルを片付ける時間がないため、動作するシェルコマンドを探していました。 驚いたことに、notが機能する例がウェブ上にたくさんあるので、私はこれらのバリエーションに行き着きました。

最初にこれらを自由にテストし、それらがどのように機能するかを研究してください。 どちらの場合も、必要なファイルのリストをlinuxの「sed」コマンドに提供し、xargsを使用してsedコマンドを作成します(xargsの興味深い要約については、this articleを参照してください)。

1. すべてのファイルを検索して置換

ファイルセット内の特定のテキストセットを置き換える必要があるが、探しているテキストが含まれている可能性のあるファイルがわからない場合、これは便利です。

grep -lr -e 'old text' * | xargs sed -i 's/old text/new text/g'

ここでgrepを使用して、「古いテキスト」というテキストを含むファイルを再帰的に(「-r」オプションで)検索します。 ここで正規表現を使って本当に創造的になります。これは、「-e」オプションによって促進されます。

Grepは、実際の検索と置換を実行するファイルのリスト(「-l」オプション)を提供します(その部分を単独で実行して出力を表示できます)。次に、このファイルのリストはsetコマンドにパイプされます。setコマンドは、古いテキストを検索して新しいテキストに置き換える実際の作業を行います。

sedの「-i」オプションはその場で編集します。つまり、元のファイルが変更されます(私の状況ではこれが必要でしたが、-iを指定するとsedにバックアップを作成するように指示できます)。 「s /…」の「s」は「substitute」を意味し、「g」は「global replacement」を意味します。

2. 指定されたファイルの検索と置換

更新する必要があるファイルの名前を知っている場合は、このバリエーションを使用できます。

find -name myconfig_file.txt | xargs sed -i 's/old text/new text/g'

これは基本的に同じ考えですが、代わりに検索操作を使用して、指定された名前に一致するファイルのリストを提供します。 これは、currentから始まるすべてのサブディレクトリを実行します。 ファイルのリストは、上記と同じ方法でsedにパイプされます。

P.S Above command tested on Ubuntu and RedHat