grep在一堆文件中存在字符串的次数

时间:2014-10-08 10:01:27

标签: groovy count

我想计算文件夹及其所有子文件夹中所有文本文件中某个字符串出现的次数。

在Linux上使用grep执行此操作的命令看起来像这样

grep string * | wc -l

任何想法如何使用groovy来做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:3)

尝试:

assert 2 == ['a','b','c','a'].grep ( ~/a+/ ).size()

其中['a','b','c','a']只是文件中的readLines()您需要处理或收集文件。

它也适用于文件对象:

def f = File.createTempFile('111','222')
f.deleteOnExit()
f.text = "a\na\nb\nc"
assert 2 == f.grep(~/a+/).size()

样本解决方案:

import groovy.io.FileType

def parent = File.createTempDir()
parent.deleteOnExit()
def f1 = File.createTempFile('111','111', parent)
f1.deleteOnExit()
def f2 = File.createTempFile('222','222', parent)
f2.deleteOnExit()
def f3 = File.createTempFile('222','222', parent)
f3.deleteOnExit()
f1.text = 'aa\naa\nbb'
f2.text = 'cc\nbb\nbb'
f3.text = 'cc\ncc\naa\naa'

def files = []
parent.eachFileRecurse (FileType.FILES) { file ->
  files << file
}

assert 4 == files.collect { f -> f.grep(~/a+/).size() }.sum()