我想将日志文件中的行复制到单独的文件中。它应该只从给定的列表中复制那些包含ip的行。
//EDIT -用于测试的更详细的代码下面是我的代码:
static String[] ips = [
"192.168.1.2",
"192.168.1.1"
];
public static void main(String[] args) {
AntBuilder ant = new AntBuilder();
String folder = 'C:/logs';
ips.each {
String ip = it;
File file = new File("${folder}/singular_incidents/${ip}.txt")
ant.copy(tofile:"${folder}/singular_incidents/${ip}.txt"){
fileset(dir: folder){
include(name:"*access*.log")
}
filterchain(){
linecontains(){
contains(ip)
}
}
}
}
}
AND日志文件(accesslog-2014-05-05.log)的内容可能如下所示
192.168.1.1 - user1 [24/Apr/2014:15:51:06 +0200] 'GET HTTP/1.1'
192.168.1.1 - user1 [24/Apr/2014:15:51:38 +0200] 'POST '
192.168.1.2 - user2 [24/Apr/2014:15:51:40 +0200] 'POST '
192.168.1.3 - user3 [24/Apr/2014:16:60:40 +0200] 'POST '
目标是我应该得到两个带名称的独立文件—192.168.1.1.txt—包含两个首行- 192.168.1.2.txt -包含第三行
不幸的是,当使用lincontains时,我得到了这个错误(我混淆了实际的ip字符串):
Caught: class org.apache.tools.ant.filters.LineContains$Contains doesn't support nested text data ("555.555.555.555")
希望这对你有帮助:
String[] ips = [
"192.168.1.2",
"192.168.1.1"
]
def ant = new AntBuilder()
def dest = new File('/tmp')
new File('.').eachFileMatch(~/access.*.log/) { log ->
ips.each { ip ->
File file = new File(dest, "${ip}.txt")
ant.copy(file: log.name, tofile: "$dest.absolutePath/${ip}.txt") {
filterchain() {
linecontains() {
contains(value: "$ip")
}
}
}
}
}