複数の置換を一度に行う (sed 実験室)

複数の sed 置換命令を書いたテキストファイルを用意します。ファイル名は何でもかまいませんが、この例では、replace.sed とします。

replace.sed

s|http://src//a\.jpg|http://dst/a\.jpg|g
s|http://src/b\.jpg|http://dst/b\.jpg|g

置換の | は区切り記号です。
普通は / を使いますが、実は、何でもいいみたいです!

今回の URL のように、/ を普通の記号として
使いたいときは、| など、別の記号を使うと見やすいですね。

. は特殊記号なので、拡張子の . を表すには \ をつけて \. のようにします。

注意) 半角 \ のコードは、¥ と同じなので、フォントによっては ¥ と表示されます。

最初の s は置換を指示する命令。最後の g はマッチする箇所が複数あった場合に、全て置換するオプションです。(指定しないと、最初の箇所のみ置換される)

あとは、sed に命令ファイルを指定して実行するだけです。

sed -f replace.sed in.txt > out.txt

エクセルから、置換ファイルを作成する

エクセルから置換に使用するセルをコピーしてテキストエディターに貼りつけます。このとき、コピーするセルの列は置換前と置換後の 2 つ、行数は自由です。

次に、sed の特殊文字の前に、\ を付けます。上の例では、.\. にします。テキストエディターの置換機能を使えば簡単にできますよね。

次は、タブを、| に置換します。エクセルからセルを貼りつけると、列の区切りはタブになるためです。

最後に、改行文字を、|g改行文字s| に置換します。最初の行には先頭の s| がつかなかったり、行末に余分な s| がついたりするので、ちょこっと修正します。

改行文字の置換の仕方はテキストエディターによって異なるので、各エディターの使い方を見てください。ちなみに自分は、emacs なので、その方法だけ書いときます。

emacs での置換方法

M-x replace-stringリターンキー
srcリターンキー
dstリターンキー
で、src を dst に一括置換できます。ただし、カーソルキーより下部分に対して適用されるので、実行する前に、カーソルをファイル先頭に移動しておきます。M-x は、メタキーを押しながら x の意味ですが、Windows には無いので、Esc を 押してから x したり、Alt で Meta の代用する設定になっている場合は、Alt-x で入力します。

emacs で改行を含む文字列の置換方法

自分流かもしれませんが、私は、改行文字をコピーしてから M-x replace-stringリターンキー して、ミニバッファーで改行文字が必要なときに、C-y (貼り付け) して置換してます。せっかくなので、もっと正しそうな情報を調べてみたら、C-q C-j で改行が入るみたいね。たまにしか使わなから、覚えられないかも・・・。

となりのページ

このサイトについて

このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。

連絡先

ここをクリック すると表示されるページから作者へメールで連絡できます。

共有