サクラエディタで改行をまたいで文字列を置き換える方法

サクラエディタは正規表現で置き換えをすることができます。

しかし、サクラエディタは2行以上(複数行)にまたがった検索は、今のところできません。

サクラエディタでは複数行に渡る正規表現の置き換えが難しい


複数行にまたがった検索を実行する一番簡単な方法は改行コードを削除することですが、編集作業の場合は改行がなくなるので使えません。

サクラエディタで改行コードを削除して置き換える


複数行にまたがった正規表現パターンで検索・置換したいけれど改行は残して置きたい。こんな場合に使える方法を紹介します。


方法

基本的な考え方は簡単です。

  1. 改行コードをテキストの中に現れない文字に置き換えてテキストを1行にします。
  2. 置き換えなどの本来行いたかった編集作業を実行します。
  3. 編集作業が終わったら改行コードを元に戻します。

テキストの中に現れない文字は、現れなさそうな文字を検索して見つけます。

具体的には以下のような文字です。

  • 漢字
  • 制御コード
  • 文字列

一番簡単なのは、漢字を使う方法です。

漢字を使う方法を例にして説明します。制御コードや文字列を使う方法も最後に説明していますから、漢字を使いたくない時はそちらを見てください。


漢字を使う方法

改行コードの置き換えに使う漢字は、テキストで使っていない漢字ならどれでも大丈夫です。

使っていない漢字を思いつかない場合は、下にかな漢字変換で見つけやすくて普段使われることが無い漢字の候補をいくつか挙げておきますので参考にしてください。

漢字読み
こしき
かしぐ
なわて
ほさき


使っていない文字を見つける

Ctrl+Fで文字列検索用のダイアログを開いて、使っていないと思う漢字を検索してテキスト中にないことを確かめます。

「見つからないときにメッセージを表示」と「先頭(末尾)から再検索する」をチェックしておきます。

サクラエディタの文字列検索用ダイアログ


改行を置き換える

Ctrl+Rで文字列置換用のダイアログを開きます。

ダイアログの「置換前」に改行コードの正規表現を入力します。「置換後」に先程見つけた使っていない文字を入力します。改行コードの正規表現は、普通は \n|\r\n|\r で大丈夫ですが、改行コードを正確に扱う必要がある場合は、この後の「改行コードの注意点」を読んでください。

「正規表現」と「先頭(末尾)から再検索する」はチェックしておきます。

入力とチェックが終わったら「すべて置換」で一括で置き換えます。

サクラエディタの文字列置換用ダイアログ


これでテキストが1行になったので、複数行の正規表現での置き換えができます。


改行を戻す方法

改行を戻すには、置き換えと反対の方法で戻します。

Ctrl+Rで文字列置換用のダイアログを開きます。

文字列置換用のダイアログの「置換前」には「置換えた漢字」を入力します。「置換後」には改行コードを入力します。改行コードは一般的にはWindowsでは \r\n ですが、違う改行コードにしたい場合は \n あるいは \r と入力してください。

「正規表現」と「先頭(末尾)から再検索する」はチェックしておきます。

入力とチェックが終わったら「すべて置換」で一括で置き換えます。

サクラエディタの文字列置換用ダイアログ


以上で、終わりです。

改行コードの注意点

改行コードはOSによって複数の種類があります。

OS改行コード
Windows\r\n
Unix, Linux, MacOS X\n
MacOS9以前\r


普通はひとつのテキストファイル中では1種類の改行コードを使います。

1種類の改行コードを使う場合は、置換前の文字列として \n|\r\n|\r を指定して、改行コードを戻す時に \r\n , \n , \r のどれかを使います。

ごく稀なケースとして、ひとつのテキストファイル中では複数の改行コードを使う場合があります。この場合は、置換前の文字列として \n|\r\n|\r を指定して置き換えてしまうと元の改行コードに戻せなくなります。

こんな場合は、2回置き換えを行って \r , \n のそれぞれを違う漢字に置き換えてください。

例えば、\r → 甑(こしき)、\n → 爨(かしぐ) に置き換える場合は以下のようにします。

4,5の手順で、\r , \n と漢字の組み合わせを間違えると改行コードが反対になってしまいますから注意してください。

  1. Ctrl+Rで文字列置換用のダイアログを開き、置換前に「\r」、置換後に「甑(こしき)」を入力して置き換えます。
  2. もう一度Ctrl+Rで文字列置換用のダイアログを開き、置換前に「\n」、置換後に「爨(かしぐ) 」を入力して置き換えます。
  3. 実行したかった編集作業を実行します。
  4. Ctrl+Rで文字列置換用のダイアログを開き、置換前に「甑(こしき)」、置換後に「\r」を入力して置き換えます。
  5. もう一度Ctrl+Rで文字列置換用のダイアログを開き、置換前に「爨(かしぐ)」、置換後に「\n」を入力して置き換えます。


制御コードを使う方法

制御コードは、置き換える文字としては優れているのですが入力が少し面倒なのが欠点です。

検索や置換のダイアログで直接制御コードを入力することができないため、テキスト本文に一度入力してコピペして使う必要があります。

テキスト本文に制御コードを入力するには、[編集]-[挿入]-[コントロールコード入力]を使います。

サクラエディタで制御コードを入力するメニュー項目

サクラエディタのコントロールコード入力ダイアログ

文字列置換用のダイアログを開いたままでも本文に制御コードを入力できるので、先にCtrl+Rで文字列置換用のダイアログを開いておくと作業が楽になります。

制御コードは基本的にはどれでもいいのですが、0x00, 0x0a, 0x0d など使えないコードもあります。すでにテキスト中で使われているということがなければ 0x01, 0x02あたりを使うのが無難です。

 

文字列を使う方法

1文字ではなく2文字以上の文字列を使うことも可能です。しかし、置き換えの時に注意が必要です。以下で、文字列を使う方法を説明しますが、漢字を使うことをおすすめします。

まず最初に、テキスト中に現れないない文字列を見つけます。例えば、XYZなどです。

この時に、文字列の中で同じ文字は1度しか使わないようにしてください。

例えば XYZ は大丈夫ですが、XYXはだめです。

すべて違う文字でなくても XYXZ のように大丈夫な場合もあります。でも、大丈夫な条件を考えるよりすべて違う文字にしたほうが簡単です。


文字列を使う場合の最大の注意点は、自分の編集作業で置き換える文字を含むような文字列は使わないほうがいいということです。

これはどういうことかというと、例えば、

AAX

というテキストで改行コードを置き換える文字列として、XYZを使うとします。XYZはテキストの中に現れないので問題ありません。

改行コードを置き換えると、改行が消えて下のようになります。

AXYZAXXYZ

ここで、もともと実行したかった置き換えがAXという文字列をBに置き換えたかったとします。そこで、エディタの置き換えでAXという文字列をBに置き換えると下のようになります。

BYZBXYZ

次に改行コードを元に戻します。するとXYZが改行に戻るため下のようになります。

BYZB

しかし、本来期待していたものはAXがBに変わった以下のテキストです。

AB    

このように、本来 XYZ の3文字で改行コードなのにその一部が置き換えられてしまうと改行コードに戻せなくなるという問題が発生します。

このため、文字列を使うよりも漢字を使う方が安全です。