基本上我想做的是插入一些额外的代码在输出文件从第三方代码生成器,我需要在几个位置插入;导入部分、字段和末尾。似乎相对容易使用/组合和重复最后一个文件,但问题是该领域的部分,我不能保证它会是相同的行数在类声明之前每一次(如果在任何时候任何人添加任何评论部分代码生成器生成的代码出来会更长),我不想中间插入我的领域的风险(任何领域可以注释),所以基本上我想匹配一个我知道会一直在那里的字段,找出在哪一行,然后在那之后插入。
那么简而言之,是否有任何方法可以使用ant找到匹配正则表达式或字符串文字的行号?(如果方便的话,只会有一个)。哦,解决方案必须是跨平台兼容的,因为有其他人访问Windows/Linux/Mac上的代码。
您可以使用脚本语言(参见scriptdef usage)来解决您的问题,例如groovy
,或groovy
任务。
我使用groovy
脚本准备了样本:
<target name="checkfile">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="libs"/>
<fileset id="files_to_search" dir="${folder.to.search}" includes="**/*.*"/>
<groovy>
ant.echo "Search for '${properties.str_to_find}' string"
project.references.files_to_search.each { fileResource ->
def file = new File(fileResource.toString())
def lines = 0
file.eachLine{
line ->
lines++;
if (line =~ /^${properties['str_to_find']}$/) println "Matches, line no: " + lines + ", file name: " + file;
}
}
</groovy>
</target>
输出:
checkfile:
搜索'ddd'字符串
匹配,行号:5,文件名:d:55ouu .txt
PS:我不是groovy程序员,但是这个示例是工作的
sed可以很容易地打印行号。(通过使用"=")
。sed -n '/yourPattern/=' yourfile
将打印所有匹配yourPattern的行号。
sed - n '/yourPattern/{=;q}' yourFile
将打印第一个匹配行
的行号一定要知道这是不是你所需要的。
AND, sed与平台无关。: D