これが私がそれを行う方法です:
files = %w[/xyz/abc.pl /xyz/def.rb /xyz/ghi.pl /xyz/jkl.rb /xyz/mno.pl foo.rb bar.pl /xyz/foo.java ]
files.grep(%r[/xyz/.+\.(?:rb|pl)$])
=> ["/xyz/abc.pl", "/xyz/def.rb", "/xyz/ghi.pl", "/xyz/jkl.rb", "/xyz/mno.pl"]
パスが何であるかを気にしない場合は、次を使用します。
files.grep(%r[\.(?:rb|pl)$])
=> ["/xyz/abc.pl",
"/xyz/def.rb",
"/xyz/ghi.pl",
"/xyz/jkl.rb",
"/xyz/mno.pl",
"foo.rb",
"bar.pl"]
一致するファイル名はログ ファイルにあると言いますが、ファイル形式の例は示していません。ファイル名が行末にある場合、$
アンカーは一致するものを取得します。ファイル名が行に埋め込まれている場合は、$
アンカーを削除します。
これは、空白を含むファイルパスでは機能しません:(
最後のサンプル コードを変更せずに、スペースが埋め込まれたファイル名とスペースが埋め込まれたパスを追加するだけです。
files = %w[/xyz/abc.pl /xyz/def.rb /xyz/ghi.pl /xyz/jkl.rb /xyz/mno.pl foo.rb bar.pl /xyz/foo.java ]
files += [
'ruby file.rb',
'perl file.pl',
'/foo bar/ruby.rb',
'/foo bar/perl.rb'
]
files.grep(%r[\.(?:rb|pl)$])
IRB では次のようになります。
irb(main):008:0> files = %w[/xyz/abc.pl /xyz/def.rb /xyz/ghi.pl /xyz/jkl.rb /xyz/mno.pl foo.rb bar.pl /xyz/foo.java ]
[
[0] "/xyz/abc.pl",
[1] "/xyz/def.rb",
[2] "/xyz/ghi.pl",
[3] "/xyz/jkl.rb",
[4] "/xyz/mno.pl",
[5] "foo.rb",
[6] "bar.pl",
[7] "/xyz/foo.java"
]
irb(main):009:0> files += [
irb(main):010:1* 'ruby file.rb',
irb(main):011:1* 'perl file.pl',
irb(main):012:1* '/foo bar/ruby.rb',
irb(main):013:1* '/foo bar/perl.rb'
irb(main):014:1> ]
[
[ 0] "/xyz/abc.pl",
[ 1] "/xyz/def.rb",
[ 2] "/xyz/ghi.pl",
[ 3] "/xyz/jkl.rb",
[ 4] "/xyz/mno.pl",
[ 5] "foo.rb",
[ 6] "bar.pl",
[ 7] "/xyz/foo.java",
[ 8] "ruby file.rb",
[ 9] "perl file.pl",
[10] "/foo bar/ruby.rb",
[11] "/foo bar/perl.rb"
]
irb(main):015:0>
irb(main):016:0* files.grep(%r[\.(?:rb|pl)$])
[
[ 0] "/xyz/abc.pl",
[ 1] "/xyz/def.rb",
[ 2] "/xyz/ghi.pl",
[ 3] "/xyz/jkl.rb",
[ 4] "/xyz/mno.pl",
[ 5] "foo.rb",
[ 6] "bar.pl",
[ 7] "ruby file.rb",
[ 8] "perl file.pl",
[ 9] "/foo bar/ruby.rb",
[10] "/foo bar/perl.rb"
]
はい、埋め込まれた空白も処理されます。
'/xyz/arb_path/abc.rb /xyz/arb_path/def.xml foo bar /xyz/arb_path/ghi.pl foo bar /xyz/arb_path/jkl.xml /xyz/arb_path/mno.rb'.split.grep(/\.(?:rb|pl)$/)
=> [
[0] "/xyz/arb_path/abc.rb",
[1] "/xyz/arb_path/ghi.pl",
[2] "/xyz/arb_path/mno.rb"
]