Anyway to make grep take a regular string?

F

Feng Tien

I know grep needs to take an regular expression.

Is there anyway to have it take a regular string instead? without using
regular expressions?
 
A

Alex Gutteridge

I know grep needs to take an regular expression.

Is there anyway to have it take a regular string instead? without
using
regular expressions?
--

What grep are you referring to? Enumerable#grep doesn't need an RE. A
String works fine as does any === implementing object:

-------------------------------------------------------- Enumerable#grep
enum.grep(pattern) => array
enum.grep(pattern) {| obj | block } => array
------------------------------------------------------------------------
Returns an array of every element in _enum_ for which +Pattern ===
element+. If the optional _block_ is supplied, each matching
element is passed to it, and the block's result is stored in the
output array.

(1..100).grep 38..44 #=> [38, 39, 40, 41, 42, 43, 44]
c = IO.constants
c.grep(/SEEK/) #=> ["SEEK_END", "SEEK_SET", "SEEK_CUR"]
res = c.grep(/SEEK/) {|v| IO.const_get(v) }
res #=> [2, 0, 1]

[alexg@powerbook]/Users/alexg/Desktop(7): irb
irb(main):001:0> ['a','b','c'].grep('a')
=> ["a"]

Or do you mean you want use a String as if it were an RE. If so then
you can just make one from the String:

irb(main):003:0> ['foo','bar','foobar'].grep(Regexp.new('foo'))
=> ["foo", "foobar"]

Alex Gutteridge

Bioinformatics Center
Kyoto University
 
F

Feng Tien

Alex Gutteridge


Yah, I'm use the Enumerable#grep

Here's what I'm trying to do

def literal (search_term, *inputs)
inputs.each do |to_search|
puts open(to_search).grep(search_term)
end
end


When I run that method, it just gives me an blank screen, while using
Regexep(search_term), i get results.

How do I get an exact match?
 
A

Alex Gutteridge

Yah, I'm use the Enumerable#grep

Here's what I'm trying to do

def literal (search_term, *inputs)
inputs.each do |to_search|
puts open(to_search).grep(search_term)
end
end


When I run that method, it just gives me an blank screen, while using
Regexep(search_term), i get results.

How do I get an exact match?

Perhaps there's a line ending "\n" you're missing. Your method works
for me below if I remember the line endings:

[alexg@powerbook]/Users/alexg/Desktop(8): echo 'foo' > foo.txt
[alexg@powerbook]/Users/alexg/Desktop(9): echo 'bar' > bar.txt
[alexg@powerbook]/Users/alexg/Desktop(10): echo 'foobar' > foobar.txt
[alexg@powerbook]/Users/alexg/Desktop(11): irb
irb(main):001:0> files = ['foo.txt','bar.txt','foobar.txt']
=> ["foo.txt", "bar.txt", "foobar.txt"]
irb(main):002:0> def literal(search_term, *inputs)
irb(main):003:1> inputs.each do |to_search|
irb(main):004:2* puts open(to_search).grep(search_term)
irb(main):005:2> end
irb(main):006:1> end
=> nil
irb(main):007:0> literal('foo',*files)
=> ["foo.txt", "bar.txt", "foobar.txt"]
irb(main):008:0> literal(Regexp.new('foo'),*files)
foo
foobar
=> ["foo.txt", "bar.txt", "foobar.txt"]
irb(main):009:0> literal("foo\n",*files)
foo
=> ["foo.txt", "bar.txt", "foobar.txt"]

Alex Gutteridge

Bioinformatics Center
Kyoto University
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top