サクラエディタの置換機能を使った簡単な独自ソート

サクラエディタの機能として昇順・降順ソートが用意されていますが、それ以外の独自の条件でソートを行いたい場合、置換機能を上手く使うことでソートできる場合があります。
改行コードを一時的に置き換えて1行のファイルにするのと、参照機能で並び替えを行うのがポイントです。
マクロとして保存すれば、繰り返し実行することもできます。

本来はjavaやC#等のプログラムでソートするべきだとは思いますが、障害対応等で急ぎで作業する必要がある場合に使えるテクニックです。


例えば、下記のCSVファイルについて、2項目目が”END”のレコードを一番最後のレコードに持って行きたいとします。

その場合、下記のように置換すると、上手くソートできます。
(改行コードはCRLFとします)

1.改行コードを独自の文字(ファイル中に出てこない任意の文字)に置き換える

置換前:\r\n
置換後:@

2.参照機能により、”3,END@”を一番後ろに移動する

置換前:(.+@)(.+,END@)(.+@)
置換後:${1}${3}${2}

3.2の操作について、”END”のレコードが一番最初にきた場合の考慮でもう一度置換

(2の操作だと”END”のレコードが一番最初にきた場合に置換条件を満たさない)
置換前:(.+,END@)(.+@)
置換後:${2}${1}

4.独自の文字を改行コードに戻す

置換前:@
置換後:\r\n


いかがでしたでしょうか。

運用作業の中には、障害対応のような迅速性が求められる作業も存在します。
作業を早く正確に行うためにはショートカットキーを覚えるのも有効ですが、このようなデータの取り扱いの小技を使いこなすのも重要です。

このような小技はこれからも紹介していこうと思います!

サクラエディタのマクロをバッチファイルで複数ファイルに対して実行

サクラエディタのマクロは、コマンドラインから実行することが可能です。
これを利用し、Windowsバッチを用いて複数ファイルに対してマクロを実行することが可能です。

例としては以下の通りです。

【フォルダ構成】

【ファイルの中身】

・CRLF→LF.mac

・CRLF→LF.bat

【処理結果】

C:\tmp\work の直下のファイルについて、改行コードの置換が一括で行われる。
(WindowsのCRLF→UnixのLF)

サクラエディタで使える便利な正規表現3選

システムの開発・保守・運用の作業を行うにあたって、サクラエディタを使って置換やgrepを行うことは少なくないと思います。
今回は、置換やgrepで使える便利な正規表現を3つ紹介したいと思います。

1.全角文字の指定

サクラエディタの正規表現では、文字コードを16進数で指定することが可能です。
そこで、以下のように指定すると、「全角文字1文字」を表現することができます。
(正規表現に「dregonig.dll Ver.3.06 with Onigmo 5.15.0」を使用している場合)

[^\x00\x00-\x7F\x00]

「\x00\x00-\x7F\x00」はASCIIコードで定義された半角文字を意味しているのですが、それを[^…]の形式で否定することで「全角文字1文字」を表現しています。

2.参照機能

置換で使える機能です。
これは、ヒットした文字列を置換後に参照できるという機能で、この機能を使用することで文字の入れ替えや柔軟な置換条件の指定が可能になります。

置換前の文字列の指定で「()」で囲った部分については「${1}」で参照できます。
「()」で囲った部分が複数存在する場合は、2つ目の「()」は「${2}」、3つ目の「()」は「${3}」…といった形で参照できます。

例を挙げると、以下のように使用できます

・置換前の文字列

hoge,fuga,piyo

・置換の指定

置換前…(.+),(.+),(.+)
置換後…${2},${3},${1}

・置換後の文字列

fuga,piyo,hoge

3.指定した文字列を含まない行の抽出

これはgrepで使用できる表記方法で、Linuxのgrepの-vオプションと同じように指定した文字列を含まない行を抽出することができます。
以下のように表記することで、それが可能になります。
(hogeは任意の文字列を示す)

^((?!hoge).)*$

詳しい説明は割愛しますが、正規表現の表記法の一つである「否定先読み」を応用した書き方となっています。