UNIX・Linuxの sedコマンドで特定の文字列を置換する方法
2015/06/15
sedコマンドで文字列置換
今日は、PHPから離れて UNIX(Linux)のコマンドのお話です。
とはいえ、PHPのプログラムなどのファイルの中にある文字列をまとめて置換したい、という場合の対応方法ですので、全く無関係ではありませんね。
今日は、ファイル内の文字列を一括置換するための UNIXコマンド(Linuxコマンド)です。
文字列置換をする UNIXコマンドは「sed」コマンドで、下記のように記述します。
1 |
sed -e 's/置換前対象文字列/置換後文字列/g' 読み取るファイル.txt > 保存.txt |
このままでは、元の「読み取るファイル.txt」の文字列を置換し、結果は「保存.txt」に保存します。
そのため、別ファイルを作らずに、置換して上書き保存するには「-i」オプションをつける必要があります。
1 |
sed -i -e 's/置換前対象文字列/置換後文字列/g' 読み取るファイル.txt |
これで、「読み取るファイル.txt」の中身が置き換えられ、上書きして保存されるます。
もし、置換する際にファイル名は変えずに上書きしたいけども、でも万一の際には元に戻せるようにバックアップを取っておきたい、という場合は、「-i」オプションにファイル名の引数を設定すれば OKです。
1 |
sed -i".bak" -e 's/置換前対象文字列/置換後文字列/g' 読み取るファイル.txt |
※「-i”.bak”」の「-i」と「”(ダブルクォーテーション)」の間隔は空けずに詰めて記述します
複数のファイルに対して実行したい場合は、「*.txt」「file_???.txt」のようにワイルドカードも使えます。
1 2 |
sed -i -e 's/置換前対象文字列/置換後文字列/g' *.txt sed -i".bak" -e 's/置換前対象文字列/置換後文字列/g' *.txt |
sedと grepを組み合わせてさらに便利に文字列置換
さらに、置換する文字列を含むファイルだけを指定して置換したい場合は、「grep」とあわせて使う方法があります。
※「grep」の「-l(エル)」オプションは、検索条件にマッチしたファイル名を表示するオプション
※「xargs」は、grepで結果を「sed」に引数として渡すコマンド
1 |
grep -l 置換前対象文字列 *.txt | xargs sed -i -e "s/置換前対象文字列/置換後文字列/g" |
この方法は、「*.txt」で指定した際にファイル数が膨大な場合や、特定の文字列を含むファイルだけを対象にしたい場合に役に立つでしょう。
ちなみに、サブディレクトリがあるディレクトリ内で「*.txt」のようなワイルドカード指定の「sed」コマンドを実行するとディレクトリ名が影響してエラーが起こるようです。
現時点では、それを回避する方法を確認できていませんので、一度サブディレクトリがないディレクトリに対照ファイルをコピーしてから実行する方がいいでしょう。(万一のコマンドのミスで取り返しが付かない置換処理がされてしまうリスクを避けるためにも有効だと思います。)
※一部、ソース上の「<」「>」などを全角文字で記述しています。
perlコマンドを使っての文字列置換
そのほか、perlのコマンドを使って実行する方法もあります。
1 |
perl -p -i.bak -e 's/event12/event13/g' event13* |
※「-i.bak」をつけずに処理をする事は出来ない
(ファイル保存ではなく、画面表示になるため)
今回の記事を書くために参考にさせていただいたサイトは以下の通りです。こちらも参考にしていただければ、と思います。
http://kazmax.zpp.jp/linux/lin_replace.html
http://what-linux.seesaa.net/article/135110745.html
http://open-groove.net/linux-command/sed-edit-files/
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
Linuxのsplitコマンドは指定したサイズにファイルを分割する
Linuxのsplitコマンドはファイルを分割する機能を有する。分割するサイズ、行数、ファイル数を指定するオプションや、分割後のファイルの接尾辞を指定するオプションなどがある。
-
-
Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法
作成からn日経ったファイルを削除したい、そんなときにはfindコマンドを使う。コマンドの記述の方法は3種類あり、それぞれを解説。書き易さもあるがスピードに大きく差がある記述方法もある。
-
-
Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説
Linuxでコマンドを設置するパスの設定情報である環境変数「PATH」の確認方法と環境変数「PATH」に新しいパスを追加する方法の解説。Linuxのシェルでの変数の扱い方についての解説も。
-
-
Linuxのマニュアルページ表示コマンドmanの解説
Linuxにはコマンド操作のオンラインマニュアルが用意されています。そのマニュアルを表示するコマンドが「man」です。「man」コマンドの使い方について解説します。
-
-
Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man
Linuxのコマンドの実行ファイルやマニュアルの情報を確認するコマンドwhich、whereis、whatis、apropos、manの機能と使い方、似たところと違うところの紹介。
-
-
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。
-
-
Linuxのファイル表示・結合catの逆処理のtac、revコマンドの解説
Linuxにtac、revというコマンドがある。catの逆の処理なのだが、tacは最終行から逆に表示し、revは行末の文字から逆に表示をすることを解説しつつその使い方について詳しく解説をする。
-
-
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。
-
-
Linuxのbashで変数に値を追加する方法を多数紹介。+=や””を使う方法など
Linuxのbashで変数に値を代入する方法を解説。bashの変数の処理は柔軟で様々な方法を採れる。デリミタなしで値を追加する方法などを解説。
-
-
Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare
Linuxに設定されている主な環境変数の解説。PWD、HOSTNAME、USER、LANG、HOME、LOGNAME、PS1、PS2、HISTSIZE、HISTFILE、HISTFILESIZE、TERMなどがある。