
スポンサーリンク
Linux環境でディレクトリ配下の複数ファイル内の文字列を一括置換するには、find
コマンドとsed
コマンドを組み合わせる方法が有効です。この記事では、keyword
を置換前の文字列、after_keyword
を置換後の文字列として、具体的な方法を解説します。
sedコマンドとは
sed
(Stream EDitor)は、テキストデータを行単位で処理し、文字列の置換や抽出を行うコマンドです。正規表現にも対応しており、シンプルながら多彩な機能を持ちます。
以下のコマンドを実行すると、最初に出現するkeyword
をafter_keyword
に置換して出力します。
$ echo 'keyword keyword' | sed 's/keyword/after_keyword/'after_keyword keyword
すべてのkeyword
をafter_keyword
に置換するには、最後にg
オプションを指定します。
$ echo 'keyword keyword' | sed 's/keyword/after_keyword/g'after_keyword after_keyword
特定の行のみを置換するには、行番号を指定できます。
$ echo -e 'line1\nkeyword line2\nkeyword line3' | sed '2s/keyword/after_keyword/'line1after_keyword line2keyword line3
置換前の文字列をgrepで確認
一括置換を行う前に、対象の文字列がどこに存在するかを確認するには、grep
コマンドを使用します。
grep -r "keyword" ./
特定のディレクトリを除外する場合は、--exclude-dir
オプションを使用します。
grep -r "keyword" ./ --exclude-dir=src
grep -r "keyword" ./ --exclude-dir={.git,node_modules}
特定の拡張子のファイル内で検索する場合は、--include
オプションを使用します。
grep -r --include=\*.txt "keyword" ./
sedコマンドで複数ファイルを一括置換
カレントディレクトリ配下のkeyword
をafter_keyword
に一括置換するには、以下のコマンドを実行します。
find ./ -type f -print | xargs sed -i "s/keyword/after_keyword/g"
注意:
sed -i
オプションを使用すると、ファイルが直接上書きされるため、実行前にバックアップを取ることを推奨します。
特定のディレクトリを除外して一括置換
特定のディレクトリ(例: node_modules
や.git
)を除外する場合は、grep -v
を組み合わせて使用します。
find ./ -type f -print | grep -v -e node_modules -e .git | xargs sed -i "s/keyword/after_keyword/g"
特定の拡張子のファイルのみを対象に置換する場合は、find
の-name
オプションを活用できます。
find ./ -type f -name "*.txt" -print | xargs sed -i "s/keyword/after_keyword/g"
置換後の文字列をgrepで確認
最後に置換が正しく行われたかgrepコマンドで確認します。
grep -r "after_keyword" ./
まとめ
sed
コマンドを使用すると、文字列を効率的に置換できる。grep
コマンドで置換対象の文字列を事前に確認可能。find
コマンドと組み合わせることで、ディレクトリ配下の複数ファイルを一括置換できる。grep -v
で特定のディレクトリを除外可能。find -name
を活用して特定の拡張子のファイルのみを対象に置換できる。
この方法を活用することで、大量のファイルを効率的に編集できます。
以上で本記事の解説を終わります。
よいITライフを!