Ruby grep, сопоставьте и верните - PullRequest
       26

Ruby grep, сопоставьте и верните

1 голос
/ 12 сентября 2011

Есть ли способ проверить, существует ли значение в файле, не ВСЕГДА проходя весь файл?

В настоящее время я использовал:

if open('file.txt').grep(/value/).length > 0
  puts "match"
else 
  puts "no match"
end

Но это неэффективно, так как я только хочу знать, существует он или нет. По-настоящему оцените решение с помощью grep / others, аналогичного однострочному.

Пожалуйста, обратите внимание на "ВСЕГДА", прежде чем понизить мой вопрос

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Если вы хотите построчное сравнение с использованием одной строки:

matches = open('file.txt') { |f| f.lines.find { |line| line.include?("value") } }
puts matches ? "yes" : "naaw"
1 голос
/ 08 апреля 2013

Вот ruby ​​one-liner, который будет работать из командной строки linux для выполнения grep над текстовым файлом и останавливаться при первом обнаружении.

ruby -ne '(puts "first found on line #{$.}"; break) if $_ =~ /regex here/' file.txt

-n получает каждую строку в файле и передает ее в глобальную переменную $ _

$. глобальная переменная, в которой хранится текущий номер строки

Если вы хотите найти все строки, соответствующие регулярному выражению, то:

ruby -ne 'puts "found on line #{$.}" if $_ =~ /regex here/' file.txt
0 голосов
/ 12 сентября 2011

По определению, единственный способ определить, существует ли в файле произвольное выражение, - это просмотреть файл и найти его.Если вы ищете первый экземпляр, то в среднем вы будете сканировать половину файла, пока не найдете свое выражение, когда оно там.Если выражения там нет, вам придется просканировать весь файл, чтобы выяснить это.

Вы можете реализовать это в одну строку, сканируя файл построчно.Используйте IO.foreach

Если вы делаете это часто, то вы можете сделать поиск суперэффективным, сначала проиндексировав файл, например, с помощью Lucene.Это компромисс - вам все равно придется сканировать файл, но только один раз, поскольку вы сохраняете его содержимое в более удобной для поиска структуре данных.Однако, если вы не обращаетесь к данному файлу очень часто, это, вероятно, не стоит лишних затрат - внедрения, обслуживания и дополнительного хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...