1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コマンドライン上で Ruby の String#gsub を使ってファイルの内容の置換を行う

Last updated at Posted at 2024-10-11

やりたいこと

  • コマンドライン上でファイルの内容を置換したい
    • ワンライナーで行いたい
    • 正規表現を使いたい

方法

$ cat ~/Downloads/yoyo.rb
class Yoyo
  MATERIALS = {
    :a6061 => 'アルミ合金 (A6061)',
    :a7075 => 'アルミ合金 (A7075)'
  }.freeze
end

$ ruby -i -e 'gets(nil).gsub(%r{:(\w+) => (.+)$}) { "#{$1}: #{$2}" }.then { puts(_1) }' ~/Downloads/yoyo.rb

$ cat ~/Downloads/yoyo.rb
class Yoyo
  MATERIALS = {
    a6061: 'アルミ合金 (A6061)',
    a7075: 'アルミ合金 (A7075)'
  }.freeze
end

解説

ruby コマンドのオプションについて

Ruby の起動 (Ruby 3.3 リファレンスマニュアル) より

-e script
コマンドラインからスクリプトを指定します。-e オプションを付けた時には引数からスクリプトファイル名を取りません。

-i[extension]
引数で指定されたファイルの内容を置き換える (in-place edit) ことを指定します。元のファイルは拡張子をつけた形で保存されます。拡張子を省略するとバックアップは行われず、変更されたファイルだけが残ります。

Kernel.#gets について

Kernel.#gets (Ruby 3.3 リファレンスマニュアル) より

gets(rs = $/) -> String | nil[permalink][rdoc][edit]
ARGF から一行読み込んで、それを返します。行の区切りは引数 rs で指定した文字列になります。rs に nil を指定すると行区切りなしとみなしてファイルの内容をすべて読み込みます。

バージョン情報

$ ruby -v
ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [arm64-darwin23]
1
1
1

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?