Ledger-cliのアカウント名を変更したい
Ledger-cli はいつでも自由にアカウント名(勘定科目名)やアカウント構造を変更できます。
今回は従来の CableTV というアカウントを変更して StreamTV:Netflix というアカウント名にしたい
<変更前>
2019/07/15 Netflix
Expenses:教養娯楽費:CableTV 1,296 JPY
Liabilitie:Visa
<変更後>
2019/07/15 Netflix
Expenses:教養娯楽費:StreamTV:Netflix 1,296 JPY
Liabilitie:Visa
CableTV には、NetflixだけではなくてHuluとかiTSCOMとかも含まれていますので、単純に sed 's/CableTV/StreamTV:Netflix/g'
するわけには行きません。
文字列Netflixの「次の行」にCableTVがあったら
それをStreamTV:Netflixに変更する
これをやりたいわけです。手動で変更するのは最悪で、件数が多いとかならずタイプミスが起こります。
どうしたら良いかと思っていたら、sedにはちゃんと方法があるんですね1。
やったことは・・・
$ sed -e '/Netflix/{n;s/CableTV/StreamTV:Netflix/}' original-ledger.dat > new-ledger.dat
つまり {n;} を使うだけ😅
これでもともとのLedgerデータファイル中の Netflix という文字列がある行のにある CableTV が StreamTV:Netflix に置換されました。めでたしめでたし!
sedで行をまたいだ文字列を置換できることが分かりましたので、過去のトランザクション中のアカウント名の変更がこれまで以上に簡単にできるようになりました。タイプミス リスクも大幅に減ります。
Ledger-cliが複式簿記を Ledger-cliがデータとしてプレーンテキストであること Bash/sed のすばらしさ、に感謝いっぱいです。
Footnotes:
-
参考にさせていただいたサイトは sedのお勉強2 特定文字列に一致した次の行を操作するスクリプト です🙏 ↩︎