カテゴリ: SHH

スラッシュを置換してみる

置換対象文字をスラッシュ(/)として置換した例を以下に記します。

  • バックスラッシュ(\)を使用して記述する sedの区切り文字はスラッシュ(/)のままの場合は、バックスラッシュを用いて記述します。
    以下に例を記します。
    $ echo "/123/" | sed "s/\//abc/g"
    abc123abc
  • sedの区切り文字をスラッシュ以外にする sedの区切り文字はスラッシュ以外も使用可能です。
    以下に例を記します。
    • #を区切り文字として使用
      $ echo "/123/" | sed "s#/#abc#g"
      abc123abc
    • !を区切り文字として使用
      $ echo "/123/" | sed 's#/#abc#g'
      abc123abc
      !を使用する場合はシングルクオートで囲む必要があります。(シェル上で!が展開されるため)
    • $を区切り文字として使用
      $ echo "/123/" | sed 's$/$abc$g'
      abc123abc
      $を使用する場合はシングルクオートで囲む必要があります。(シェル上で!が展開されるため)

以上、sedコマンドでスラッシュを置換する表記方法の例を記しました。

grepなどで置換する際、

grep -rl "before" ./ | xargs perl -i -pe "s/before/after/g

でやるが検索文字beforeの中に”/”などがあると当然エラーとなる。

そんなときは”\/”といれ¥を前につけてやると文字扱いしてれる。

その他正規表現のワイルドカードの文字の場合も同じかもしれない。たぶん。
 ダウンロード

LinuxやMacのターミナル上で、簡単に複数ファイルの文字列を一括置換出来る方法です。いつも失念してしまうので、備忘録として残します。

方法

具体的な方法としては下記のような処理を行います。

  • Grepで置換したい文字列を含むファイル一覧を取得
  • Perlを用いて文字列を実際に置換
grep -rl "beforeString" ./ | xargs perl -i -pe "s/beforeString/afterString/g"

補足

perlのオプションは下記の通りです。

オプション 機能
-e 文字列をスクリプトとして実行
-p 繰り返し処理と標準出力
-i ファイルを編集して、バックアップを作成

↑このページのトップヘ