exec可执行sed

时间:2012-08-17 08:45:07

标签: ant sed exec

想要使用ant替换macos上的txt文件中的值。 我使用了以下代码,但它给出了错误:"该类型不支持嵌套文本数据("")"。

<exec executable="sed">
   <arg value="s/old/new/g" />
   <arg value="$MY_FILE" />
 </exec>.

如何替换变量的值,我在windows上使用替换文件,它可以工作。

3 个答案:

答案 0 :(得分:4)

也许有点晚了,但我刚发现了这个问题。希望我的解决方案至少帮助其他人。

缺少一个参数。命令行上的sed需要-e“你的表达式”-f“/ path / to / your scriptfile”。在使用ant的情况下,您希望直接更改文件(在sed的语音中“内部”),而不是更改不同的输入/输出文件。因此,您需要添加-i(或更简单,将-e更改为-ie)。 因此,正确的调用将是:

<exec executable="sed">
   <arg value="-ie" />
   <arg value="s/old/new/g" />
   <arg value="$MY_FILE" />
</exec>

答案 1 :(得分:1)

也许这可以帮助

ant-contrib PropertyRegex

对输入字符串执行正则表达式操作,并将结果设置为属性

http://ant-contrib.sourceforge.net/tasks/tasks/propertyregex.html

答案 2 :(得分:0)

就我而言,我不需要更改我的源文件,并且我需要将一些路径更改到我的log4j.properties中。所以这是我的解决方法

<exec executable="sed">
        <arg value="s-/path/to/change/in/log4j_file-/new/path-g"/> 
        <arg line="./src/log4j.properties"/>
        <redirector output="./output/path/conf/log4j.properties" ></redirector>
</exec>

就像这个命令:

sed 's-/path/to/change/in/log4j_file-/new/path/log-g' ./src/log4j.properties > ./output/path/conf/log4j.properties