ファイル名の数字順Grepの方法
サクラエディタのGrepは、そこそこ便利で使っている人も多いと思います。
しかし「完璧」になんでもこなせるわけではありません。
そのひとつに「ファイル名がエクスプローラーと同じ順番にならない」という問題があります。
Windows XP SP1 以降では、ファイル名は「数字順ソート」のような並び順になります。
0,1,2 ... 8,9,10,11 ... 98,99,100,101
という風に桁数の小さい数字から順番に並ぶようになりました。
しかしサクラエディタのGrepでは、伝統的な文字列の辞書順で並びます。
これだと0から101の数字のファイル名を与えると
0,1,10,100,101,11,12 ... 19,2,20,21... 28,29,3,30,31 ... 98,99
というふうに並びます。
場合によってはGrep結果を見るのが大変になってしまいます。
「*.txt」とかでGrepするとそうなりますが、場合によっては少し工夫すると、数字順「風」に並べることができます。
ファイル名の指定を工夫する
サクラエディタの「ファイル」の部分は複数のワイルドカードが使えます。
ここでは半角スペースで区切っていますが、,
や;
で区切ることもできます。
この複数個のワイルドカードは、左側から順に一覧を取得してその中で文字列ソートされます。
そこで ?.txt ??.txt ???.txt
の順番に指定すると、1桁のファイル、2桁のファイル、3桁のファイル、の順番に検索することができます。
これで1.txt 9.txt 10.txt 11.txt
のようなファイル名に対応できます。
もしファイル名がabc.txt abc2.txt abc3.txt abc9.txt abc10.txt abc11.txt
であれば、
abc.txt abc?.txt abc??.txt
のように指定すればOKです。
日付順
数字の部分が「2か所」以上ある場合は、桁数での制御だけでは、うまく検索することはできません。
? ??
だけで順番をちゃんと制御することは無理っぽいです。
ちょっと対応が面倒くさいですが、無理やりできないこともないです。
そこでGrepを1年を2回に分けます。
※サクラエディタのGrepの「ファイル」の部分には恐らく260文字まで入力できます。
一回目:2019-1-?.txt 2019-1-??.txt 2019-2-?.txt 2019-2-??.txt 2019-3-?.txt 2019-3-??.txt 2019-4-?.txt 2019-4-??.txt 2019-5-?.txt 2019-5-??.txt 2019-6-?.txt 2019-6-??.txt
二回目:2019-7-?.txt 2019-7-??.txt 2019-8-?.txt 2019-8-??.txt 2019-9-?.txt 2019-9-??.txt 2019-10-?.txt 2019-10-??.txt 2019-11-?.txt 2019-11-??.txt 2019-12-?.txt 2019-12-??.txt
このように[1-12]を直接指定することで、なんとかそれっぽい順番でGrepすることができます。
複数年(2017-2020)で簡易的ですが月順さえ並んでいればいいなら
2017-?-*.txt 2017-??-*.txt 2018-?-*.txt 2018-??-*.txt 2019-?-*.txt 2019-??-*.txt 2020-?-*.txt 2020-??-*.txt
こんな感じにGrepすることもできます。
発想の転換、結果を並び替える
Grepする順番を細かく制御することは難しいですが、Grep結果を「ソート」することはできます。
Grepの結果出力形式を「ノーマル」にします。
正規表現置換などを使用して「ファイル名」を「0パディング」に加工します。
C:\folder\calendar\2019-10-1.txt [UTF-8]
C:\folder\calendar\2019-10-10.txt [UTF-8]
C:\folder\calendar\2019-10-31.txt [UTF-8]
C:\folder\calendar\2019-10-9.txt [UTF-8]
C:\folder\calendar\2019-11-1.txt [UTF-8]
C:\folder\calendar\2019-12-1.txt [UTF-8]
C:\folder\calendar\2019-12-31.txt [UTF-8]
C:\folder\calendar\2019-9-31.txt [UTF-8]
・月の0パディング置換「calendar\\20(.{2})-([0-9])-([0-9]*)\.txt
」→「calendar\\20$1-0$2-$3.txt
」
・日の0パディング置換「calendar\\20(.{2})-([0-9]{2})-([0-9])\.txt
」→「calendar\\20$1-$2-0$3.txt
」
・Grep結果の範囲選択
・サクラエディタの機能「選択行の昇順ソート(Alt+A)」
C:\folder\calendar\2019-09-31.txt [UTF-8]
C:\folder\calendar\2019-10-01.txt [UTF-8]
C:\folder\calendar\2019-10-09.txt [UTF-8]
C:\folder\calendar\2019-10-10.txt [UTF-8]
C:\folder\calendar\2019-10-31.txt [UTF-8]
C:\folder\calendar\2019-11-01.txt [UTF-8]
C:\folder\calendar\2019-12-01.txt [UTF-8]
C:\folder\calendar\2019-12-31.txt [UTF-8]
・タグジャンプを復活させたいなら-0([1-9])
を-$1
などに置換して、ファイル名を戻す。
ということをすれば、ファイル名順になります。
また「数字順ソート」マクロを作るか探してきて使えば、一発で並び替えできる場合もあります。