Название говорит само за себя. Я только хочу знать, существует ли она, а не там, где она есть. Есть ли один лайнер для достижения этого?
Каков наилучший способ поиска строки в файле?
Ответ 1
File.open(filename).grep(/string/)
Это загружает весь файл в память.
Если вы имеете дело с большими файлами, предпочитайте их разрывать.
Это означает загрузку одной строки за раз, а не весь файл.
File.foreach(filename).grep(/string/)
Хорошая практика, чтобы очистить после себя, а не позволить сборщику мусора обрабатывать его в какой-то момент. Это более важно, если ваша программа долговечна, а не просто быстрый script. Использование блока кода гарантирует, что объект File
будет закрыт, когда блок завершится.
File.foreach(filename) do |file|
file.grep(/string/)
end
Ответ 2
grep для foo ИЛИ bar ИЛИ baz, украден из ruby1line.txt.
$ ruby -pe 'next unless $_ =~ /(foo|bar|baz)/' < file.txt
Ответ 3
Ну, похоже, eed3si9n имеет один гильза, здесь более длинное решение:
f = File.new("file.txt")
text = f.read
if text =~ /string/ then
#relevant code
end
Ответ 4
Если ваша ОС имеет пакет grep, вы можете использовать системный вызов:
system("grep meow cat_sounds.txt")
Это вернет true, если grep
возвращает что-либо, false, если это не так.
Если вы находите себя в системе с grep
, вы можете обнаружить, что это "лучший" способ, поскольку Ruby может быть медленным, когда дело касается операций с файлами.
Ответ 5
Это читает файл только для первого появления строки "string" и обрабатывает его по строкам - не просматривая весь файл сразу.
def file_contains_regexp?(filename,regexp)
File.foreach(filename) do |line|
return true if line =~ regexp
end
return false
end