Linuxの検索と置換の例
私は最近、ネストされたサブディレクトリの中にある一連の設定ファイルに現れるテキストを変更しなければならない状況にありました。 10歳のperlスキルを磨く時間がなかったので、私は動作するいくつかのシェルコマンドを探していました。驚いたことに、ウェブ上に
役に立たない
例がたくさんあるので、私はこれらのバリエーションに終わった:
最初にこれらを試してみて、どのように動作するかを調べてください。いずれの場合も、xargsを使ってsedコマンドをビルドするために、linux “sed”コマンドに必要なファイルのリストを提供しています(http://www.linuxjournal.com/content/applying-xargsを参照してください)。]xargsの興味深い要約については)。
1.すべてのファイルの検索と置換
一連のファイルで特定のテキストセットを置き換える必要があるが、探しているテキストがどのファイルに含まれているのかわからない場合は、次のように便利です。
grep -lr -e 'old text' ** | xargs sed -i 's/old text/new text/g'
ここでgrepを使うと、 “old text”というテキストを含むファイルを探すために再帰的に( “-r”オプション)検索します。正規表現は “-e”オプションで簡単に作成できます。
Grepは、実際の検索を実行するファイルのリスト( “-l”オプション)を提供します(その部分を単独で実行して出力を見ることができます)。このファイルのリストは次にsetコマンドにパイプされ、古いテキストを検索して新しいテキストに置き換える実際の作業を行います。
sedの “-i”オプションは、元のファイルが変更されたことを意味するedit-in-placeを生成します(私の状況ではこれは必要でしたが、-iを指定するとsedはバックアップを作成するよう指示できます)。 「s/…」の「s」は「代替」を意味し、「g」は「グローバル置換」を意味します。
2.指定されたファイルの検索と置換
更新が必要なファイルの名前を知っている場合は、次のバリエーションを使用できます。
find -name myconfig__file.txt | xargs sed -i 's/old text/new text/g'
これは基本的には同じ考えですが、代わりにfind操作を使用して指定された名前に一致するファイルのリストを提供します。これは現在のすべてのサブディレクトリから実行されます。ファイルのリストは、上記と同じ方法でsedにパイプされます。
P.S上記のコマンドはUbuntuとRedHat
でテストされています
参考文献
-
link://mac/sed-command-hits-undefined-label-error-on-mac-os-x/[sed
コマンドがMac OS Xで「未定義ラベル」エラーを表示する]
リンク://タグ/検索/[検索]リンク://タグ/unix/[unix]