2014-01-17 2 views
0

Что я хочу сделать, так это создать Ruby oneliner, чтобы проверить, существует ли в файле несколько строк. Возвращаем код возврата 0, если найдено иначе 1.Ruby oneliner проверить, существует ли несколько строк в файле

Например, если у меня есть файл с именем/tmp/foo со следующим содержимым.

one 
two 
three 
four 
five 
six 
seven 

Если строка поиска «один \ Ntwo \ nthree», то он будет возвращать 0. Если строка поиска «один \ два \ четыре», то он будет возвращать 1.

Я нашел куча примеров в Интернете, таких как следующие, но в основном для поиска/замены и поиска/печати. Я не уверен, как массировать его, чтобы делать то, что я хочу.

ruby -i -e 'puts gets(nil).gsub(/${line}/,\"\")' ${file} 
ruby -ne 'print -f ~/<regex>/' <file> 

Спасибо

ответ

2

Вот один из способов. Там может быть короче:

ruby -e "exit(gets(nil) =~ %r{${line}} ? 0 : 1)" ${file} 

Пример вызова:

[email protected] ~ $ cat sample 
one 
two 
three 
four 
five 
[email protected] ~ $ ruby -e 'exit(gets(nil) =~ %r{one\ntwo\nthree} ? 0 : 1)' sample ; echo $? 
0 
[email protected] ~ $ ruby -e 'exit(gets(nil) =~ %r{one\ntwo\nfour} ? 0 : 1)' sample ; echo $? 
1 
0
File.read(filename).include?("one\ntwo\nthree") ? 0 : 1 

doc = <<END 
one 
two 
three 
four 
five 
six 
seven 
END 

filename = 'data' 
File.write(filename, doc) 

File.read(filename).include?("one\ntwo\nthree") ? 0 : 1 # => 0 
File.read(filename).include?("one\ntwo\nfour") ? 0 : 1 # => 1 

Из командной строки:

ruby -e 'File.read("data").include?("one\ntwo\nthree") ? 0 : 1' # => 0 
Смежные вопросы