前回はこちら。 先日v1.29.0のリリースについてブログを書いたが早速v1.32.2をリリースしたのでまた変更点を紹介。 なお、v1.32.0とv1.32.1はリリースワークフローのエラーにより廃番です。
お知らせ!アドカレやります
明日(12/1)からrfコマンドのアドベントカレンダーを始めます!
rfコマンドの紹介や推しポイント、便利な使い方を毎日更新する!…予定。 記事はZennにアップロードします*1。 私以外に使っている人はいないとおもうけど、どなたでも参加可能です!
主な更新点
- grepモードに -e と -i オプションを追加
- Arrayを出力するときにスペース区切りだったのを改行区切りに変更
- Array#to_ssv (Array#to_v) を追加
- IPv4にマッチする正規表現パターンを埋め込むメタ文字を追加
- MatchDataの出力はキャプチャグループを表示するように変更
- Object#to_base64を追加
- at_exitがnilを返却するように変更
grepモードに -e と -i オプションを追加
grepコマンドとの互換性を高めるためにオプションの追加を行った。 とりあえず私がよく使う -e と -i オプション。 これ以外にもよく使うオプションは追加していこうと思っている。
Arrayを出力するときにスペース区切りだったのを改行区切りに変更
今までArrayをputsする時はスペース区切りにしていた。 しかしながら、CRubyでは改行区切りであるため、CRubyの挙動に合わせるべく改行区切りに戻した。
# v1.29.0まで $ echo "foo bar baz" | mise exec rf '$F' foo bar baz # v1.30.0から $ echo "foo bar baz" | rf '$F' foo bar baz
Array#to_ssv (Array#to_v) を追加
Arrayを改行区切りで出力するように戻したが、それでもスペース区切りが欲しい時もある。
そこで、Array#to_ssvを追加した。SSVはSpace Separated Valuesの略称。
このメソッドのエイリアスとしてArray#to_vメソッドも追加している。
$ echo "foo bar baz" | rf '$F.to_v' foo bar baz
IPv4にマッチする正規表現パターンを埋め込むメタ文字を追加
私が普段使いしているとIPv4アドレスをマッチすることが多々あった。
毎回その正規表現を書くのが面倒になったので、独自にメタ文字を追加することにした。
追加したメタ文字は (?&ipv4) とした。
これはPCREのサブパターン呼び出しのメタ文字と同じなのだが、onigmoでは使えないのでバッティングしないのでこれでよしとした。
$ cat server_list server1 192.168.1.101 server2 192.168.1.102 server3 192.168.1.103 $ rf 'match /((?&ipv4))/' < server_list 192.168.1.101 192.168.1.102 192.168.1.103
MatchDataの出力はキャプチャグループを表示するように変更
今までMatchDataを表示するときはto_sしてから表示してた。
MatchDataをto_sすると、マッチした文字列全体($&やself[0])が含まれているのだが、正規表現でキャプチャグループを使っている場合、そのグループだけを表示したいことがあったため、このグループだけを表示するように変更した。
# v1.30.0まで $ echo "foo bar baz hoge" | mise exec rf@1.30.0 -- rf 'match /foo (bar baz) hoge/' foo bar baz hoge # v1.31.0から $ echo "foo bar baz hoge" | rf 'match /foo (bar baz) hoge/'
Object#to_base64を追加
任意のオブジェクトをBASE64エンコーディングして出力する Object#to_base64 を追加した。
$ echo "foo bar baz hoge" | rf to_base64 Zm9vIGJhciBiYXogaG9nZQ== $ echo "foo bar baz hoge" | rf to_base64 | base64 -d foo bar baz hoge
at_exitがnilを返却するように変更
地味な変更なのだけど、今まではat_exitはProcを返却していたのだけど、nilを返却するようにした。
なぜこの変更をしたのかというと、at_exitはコマンドの最後に書くことが多い*2のだが、そうするとProcを返してしまいこれを出力してしまうことがあった。
これを回避するために -q や nilを返すようにするのだけどこれが手間なので、そもそもat_exitをnilを返すようにした。
# v1.31.0まで $ echo -e "1\n2\n3"| mise exec rf@1.31.0 -- rf 's += _; at_exit{ puts s }' #<Proc:0x2efab0f0 (eval):1> #<Proc:0x2efab0f0 (eval):1> #<Proc:0x2efab0f0 (eval):1> 6 # v1.32.0から $ echo -e "1\n2\n3"| rf 's += _; at_exit{ puts s }' 6