LoginSignup
0
0

Ruby芸160チャレンジ(#10)マッチ文字列の一部を使った置換

Last updated at Posted at 2023-12-09

この記事は何

shellgei160を通じて言語習得 Advent Calendar 2023に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

実行環境など

  • Docker image: ruby:3.0.2
  • 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下にanswer-rubyディレクトリを作り、その中に解答となるファイルを作成していきます。

今回のテーマ

$ cat headings.md | sed -r 's/^## +(.*)/\1\n---/' | sed -r 's/^# +(.*)/\1\n===/'

以下のように文字列を置換する処理です。ポイントはマッチした文字列の一部を使って、置換後の文字列を作成する点です。

(変換前)
## subset

(変換後)
subset
---

text = File.open('qdata/10/headings.md', 'r').read
text.gsub!(/^## +(.*)/, "\\1\n---")
text.gsub!(/^# +(.*)/, "\\1\n===")
puts text

所感・メモ

  • ( )で囲ったブロック(?)を置換後文字列の中で使うには\1(複数あれば\2, ...)を使う。\nを入れるので、置換後文字列はダブルクオーテーションにしておく。\1はエスケープが必要なので\\1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0