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

时间:2011-10-24 10:39:42

标签: regex ant

基本上我想要做的是从第三方代码生成器向输出文件中插入一些额外的代码,我需要在几个位置插入;导入部分,字段和最后。使用with / combination并在末尾回显文件似乎相对容易,但问题出在字段部分,因为我无法保证每次Class声明之前它们的行数相同(如果在任何时候任何人添加任何代码生成代码生成器吐出的注释部分的代码将更长)我不想冒险插入我的字段中间的东西(任何字段可能有注释),所以基本上我我希望匹配其中一个我知道将永远存在的字段,找出所在的字段并在之后插入。

简而言之,有什么方法可以使用ant来查找匹配正则表达式或字符串文字的行号? (只有这样才能让事情变得更容易)。哦,解决方案必须是跨平台兼容的,因为还有其他人在Windows / Linux / Mac上访问代码。

2 个答案:

答案 0 :(得分:1)

您可以使用脚本(请参阅scriptdef用法)语言groovygroovy任务来解决您的问题。
我使用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:\ 55 \ ouuu.txt

PS:我不是常规的程序员,但是这个样本正在运行

答案 1 :(得分:0)

sed可以轻松打印行号。 (通过使用“=”)

e.g。 sed -n '/yourPattern/=' yourfile

将打印所有行号,这些行与yourPattern匹配。

sed - n '/yourPattern/{=;q}' yourFile

将打印第一个匹配行的行号

知道这是否是你需要的。

AND,sed与平台无关。 :d