この記事は何
shellgei160を通じて言語習得 Advent Calendar 2023に参加しています。
書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。
例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160
実行環境など
- Docker image: ruby:3.0.2
- 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に
answer-ruby
ディレクトリを作り、その中に解答となるファイルを作成していきます。
今回のテーマ
別解1 $ IFS=-;a=($(<cardno));echo xxxx-xxxx-${a[2]}-${a[3]} > cardno
別解の方が題意がわかりやすかったので、そちらを引用させて頂きました。1234-5678-9012-3456 というカード番号の上位8桁をxxxx-xxxx-9012-3456のようにマスクします。
解
# 今回は結果のファイル書き込みは割愛
srcpath = 'qdata/19/cardno'
puts File.open(srcpath, 'r').read.gsub(/^(\d{4}-\d{4})/, 'xxxx-xxxx')
所感
- 正規表現の扱いはだいぶ慣れてきた!