サクラエディタで特定の行だけ一部文字列置換
相変わらずこのブログでアクセス頻度が高い2つの記事。大抵ツートップ。
サクラエディタで特定の文字列を含む行を削除(2012-04-03)
サクラエディタで空行削除(2009-01-10)
そんなに需要があるならば最近無茶振りされた事例から一つ。実際のデータは機密(?)らしく意味不明のサンプルだけ渡されました。そのイメージをさらに改変しています。
置換前 0005320999 XXXXX YYYYY ZZZZZZ AAA_MARK P Q R123 0009990999 XXDDX YUYYY ZZBBZZZ AAA_MARK S 345T U 0005110999 XXDDX YUYYY ZZBBZZZ AAA_MARK V1 W X 置換後 0005329000 XXXXX YYYYY ZZZZZZ AAA_MARK P Q R123 0009990999 XXDDX YUYYY ZZBBZZZ AAA_MARK S 345T U 0005119000 XXDDX YUYYY ZZBBZZZ AAA_MARK V1 W X
細かい事情など私も知りませんが、どうやら何かのインデックスナンバーをAAA_MARKという特別なマーカーを含む行だけ数値の一部を置き換えたいらしい。複数回置換したら?やPerl使ったら?などの提案は全てボツ。サクラエディタ(か何かWindows上で動く一般的なソフト)で一発変換で無ければ困るらしい。しかも100万行を超える中から数万行だけ変えたいとか何をやっているのかサッパリ。そもそもこんな訳の分からないデータをどうやって作ったかの方が問題な気が…。最初のインデックスを分割して保存していれば簡単なのにとか、なんで固定長と可変長データが混ざっているのか、セパレーターが有るようで無いとか突っ込みどころ満載。
入力例
とりあえず、^(000[0-7][0-9][0-9])0999 (.*AAA_MARK.*)\r\nから${1}9000 $2\r\nへの置換で満足されたらしい。この場合、\r\nは冗長かもしれませんが念のため付けることにしました。
この手の依頼(?)は仕様を聞き出すのが困難で「そこは変えたらあかん」とか「こっちは変えな」とか言いたい放題で仕様書が出る気配はゼロです。
以上、あーしんど。