我能找到与ant中的表达式匹配的行号吗?

  • 本文关键字:表达式 ant regex ant
  • 更新时间 :
  • 英文 :


基本上我想做的是插入一些额外的代码在输出文件从第三方代码生成器,我需要在几个位置插入;导入部分、字段和末尾。似乎相对容易使用/组合和重复最后一个文件,但问题是该领域的部分,我不能保证它会是相同的行数在类声明之前每一次(如果在任何时候任何人添加任何评论部分代码生成器生成的代码出来会更长),我不想中间插入我的领域的风险(任何领域可以注释),所以基本上我想匹配一个我知道会一直在那里的字段,找出在哪一行,然后在那之后插入。

那么简而言之,是否有任何方法可以使用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

相关内容

  • 没有找到相关文章

最新更新