オブジェクト指向スクリプト言語。サーバプロセスからone-linerまで何でもこなす優れモノらしいが、まだド素人な私が真髄を理解できるようになるにはしばらくかかりそうだ。とりあえず、sedやawkの代替たり得るのか見極めたい。
perlだが
A=readlines(nil); B=A[0].split(/.../); ...などとする。readlines(nil)で区切りなく読んでくれるみたいなので、その後にsplitで分割
恥ずかしいので私以外の人はあんまり見ないで下さい。
ハイフンから成る行で挟まれた部分、即ちハイフンの「内側」を削除する(表示しない)テキストフィルタ。但し冒頭から最初のハイフン行までは「外側」とする。
ruby -e 'd=true; c=/^-+$/; while gets; if not c=~$_; if d; print $_; end; else; d=(not d); end; end;'
Dir.glob('*.bmp') do |f| puts f end
でOKだった。以前私が書いた以下の「まわりくどい方法」なんてバカみたいだ
列挙する条件もあると便利。でもlsとシェルのワイルドカードの方が便利かも
files = Dir.entries(Dir.pwd).find_all{|x| x =~ /.*\.rb$/}.each do |rubyfile| puts rubyfile end
愚直に
puts "test.rb".gsub(".rb",sprintf("%03d.html", n))
文字列の追加は
<<
cf.
丸カッコで正規表現を囲む
/(\d)\.rb/ =~ "test5.rb" puts $1
1.bmp, 2.bmp ... とあるファイルの体裁をもうちょっと整える。
linenum = ARGV.shift.to_i Dir.foreach(Dir.pwd) do |file| if file =~ /\d+\.bmp/ File.rename(file, file.sub(/(\d+)/){sprintf("line%02d_%04dum", linenum, ($1.to_i-1) * 250)} ) end end
1.jpg, 2.jpg ... というファイル群があった。数字は野球選手の背番号。これを対応する選手名に一括renameしたいと思った。この時
0 高橋光信 2 荒木雅博 ...
みたいな対応表(スペース区切りテキストファイル)を作り、sedで処理して
0.jpg 高橋光信.jpg 2.jpg 荒木雅博.jpg ...
とかした後に
text = open("rename.txt") while line = text.gets /(.*) (.*)/ =~ line File.rename($1,$2) end text.close
とした。途中でsedの処理が入る俺はヘタレだ
bashなんかだと、ファイルの操作の際はワイルドカードで結構お手軽に色々とできるので好き。rubyでの処理でこの助けを借りるならば、
ruby hoge.rb *.bmp
なんて感じか。hoge.rbは、例えば以下のような感じ。
ARGV.each do |a| puts a end
おまけ