String ant-如何注释除与特定字符串匹配的行之外的所有行
我想注释SQL脚本的所有行,除了那些包含字符串TABLE1(区分大小写)的行,如果可能的话,只使用单个ant任务(replaceregexp?)。 理想情况下,注释(以“-”开头)和空行应该被忽略,但如果不是,这就不那么重要了 例: 初始文件String ant-如何注释除与特定字符串匹配的行之外的所有行,string,ant,replace,matching,String,Ant,Replace,Matching,我想注释SQL脚本的所有行,除了那些包含字符串TABLE1(区分大小写)的行,如果可能的话,只使用单个ant任务(replaceregexp?)。 理想情况下,注释(以“-”开头)和空行应该被忽略,但如果不是,这就不那么重要了 例: 初始文件 CREATE TABLE TEST (TEST_ID VARCHAR(255) NOT NULL, TEST_NAME VARCHAR(255)); CREATE TABLE LICENSE (ID BIGINT NOT NULL GENERATED BY
CREATE TABLE TEST (TEST_ID VARCHAR(255) NOT NULL, TEST_NAME VARCHAR(255));
CREATE TABLE LICENSE (ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, PRIMARY KEY (ID));
delete from TEST2 where
ID = 'whatever'
;
delete from TEST3 where
ENV = 'whatelse'
;
UPDATE TEST1 SET VERSION = '1.0';
最终文件
-- CREATE TABLE TEST (TEST_ID VARCHAR(255) NOT NULL, TEST_NAME VARCHAR(255));
-- CREATE TABLE LICENSE (ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, PRIMARY KEY (ID));
-- delete from TEST2 where
-- ID = 'whatever'
-- ;
-- delete from TEST3 where
-- ENV = 'whatelse'
-- ;
UPDATE TEST1 SET VERSION = '1.0';
我找到的唯一解决方案是:
1.注释掉脚本的所有行,然后取消注释与字符串TEST1匹配的行:
<replaceregexp file="${sql.file}"
match="(.*)"
replace="-- \1"
byline="true"
/>
<replaceregexp file="${sql.file}"
match="^-- (.*TEST1)"
replace="\1"
byline="true"
/>
<copy file="${sql.file}" tofile="${sql.file.bak}">
<filterchain>
<linecontains>
<contains value="TEST1"/>
</linecontains>
</filterchain>
</copy>
<replaceregexp file="${sql.file}"
match="(^(?!$))(?!.*TEST1)"
replace="-- \1"
byline="true" />
一个解决办法可能是
<replaceregexp file="${sql.file}"
match="(^(?!$))(?!.*TEST1)"
replace="-- \1"
byline="true" />
为什么是蚂蚁?这是一个非常糟糕的脚本环境。Ant因为我别无选择,我被要求维护其他人用Ant编写的代码。你认为哪种语言最好?为什么是ANT?这是一个非常糟糕的脚本环境。Ant因为我别无选择,我被要求维护其他人用Ant编写的代码。你认为哪种语言最适合这样做?太好了,它很有魅力,非常感谢!不过我有几个问题:(^(?!$)是什么意思,^代表行的开头,$代表行的结尾?我不完全明白(尽管我猜)为什么。非常欢迎您的解释。好的,我理解:^(?!$)匹配非空行。进一步优化是可能的:因为在这种情况下\1总是扩展为空,您可以忽略它:最符合要求的答案似乎是:太好了,它像一个符咒一样工作,非常感谢!不过我有几个问题:(^(?!$)是什么意思,^代表行的开头,$代表行的结尾?我不完全明白(尽管我猜)为什么。非常欢迎您的解释。好的,我理解:^(?!$)匹配非空行。进一步优化是可能的:因为在这种情况下\1总是扩展为空,您可以忽略它:最符合要求的答案似乎是: