2014-01-17 27 views
0

我想要做的是創建一個Ruby oneliner來檢查文件中是否存在多行。如果找不到1則返回0返回代碼。Ruby oneliner檢查文件中是否存在多行

例如,如果我有一個名爲/ tmp/foo的文件,並帶有以下內容。

one 
two 
three 
four 
five 
six 
seven 

如果搜索字符串爲「一個\ ntwo \ nthree」,那麼它會返回0 如果搜索字符串爲「一個\ 2 \四」那麼這將返回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