在我的源文件中,有多个if子句具有相同的检查。我想通过注释掉基于if语句后定义的文本的条件语句来使条件块之一始终执行。
if [ "${SVR_GRP}" = "obi" ] ; then
EXTRA_JAVA_PROPERTIES="-Doracle.fusion.appsMode=true ${EXTRA_JAVA_PROPERTIES}"
export EXTRA_JAVA_PROPERTIES
fi
if [ "${SVR_GRP}" = "obi" ] ; then
EXTRA_JAVA_PROPERTIES="-DUseSunHttpHandler=true ${EXTRA_JAVA_PROPERTIES}"
export EXTRA_JAVA_PROPERTIES
fi
替换为
if [ "${SVR_GRP}" = "obi" ] ; then
EXTRA_JAVA_PROPERTIES="Doracle.fusion.appsMode=true ${EXTRA_JAVA_PROPERTIES}"
export EXTRA_JAVA_PROPERTIES
fi
#if [ "${SVR_GRP}" = "obi" ] ; then
EXTRA_JAVA_PROPERTIES="-DUseSunHttpHandler=true ${EXTRA_JAVA_PROPERTIES}"
export EXTRA_JAVA_PROPERTIES
#fi
您能否建议我如何使用perl / python或shell脚本执行此操作?
我尝试了对我不起作用的perl命令,
perl -0pe '/if [ "${SVR_GRP}" = "obi" ] ; then\nEXTRA_JAVA_PROPERTIES="-DUseSunHttpHandler=true ${EXTRA_JAVA_PROPERTIES}"/#if [ "${SVR_GRP}" = "obi" ] ; then\nEXTRA_JAVA_PROPERTIES="-DUseSunHttpHandler=true ${EXTRA_JAVA_PROPERTIES}"
Python程序按预期工作,但认为它是解决方法,感觉可以有更好的解决方案。我不擅长shell脚本和perl。
file_loc = 'D:/official/workspace/pythontest/test/oops/test.sh'
new_file_loc = 'D:/official/workspace/pythontest/test/oops/test1.sh'
def modify():
file = open(file_loc)
file2 = open(new_file_loc, 'w')
lines = []
count = -1;
found = False
for line in file:
if str(line).strip() == 'if [ "${SVR_GRP}" = "obi" ] ; then':
count = 3;
lines.append(line)
else:
if str(line).strip() == 'EXTRA_JAVA_PROPERTIES="-DUseSunHttpHandler=true ${EXTRA_JAVA_PROPERTIES}"':
found = True
lines.append(line)
count = count - 1;
if (count == 0):
writeIntoFile(file2, lines, found)
found = False
count = -1
lines = []
elif count < 0:
lines = []
file2.write(line)
def writeIntoFile(file, lines, found):
for line in lines:
if found == False:
file.write(line)
elif str(line).strip() == 'if [ "${SVR_GRP}" = "obi" ] ; then' or str(line).strip() == 'fi':
file.write('#' + line);
else:
file.write(line)
modify()
答案 0 :(得分:0)
我希望根据第二行文字值注释条件
我担心这是一个非常不明确的规范。请更加努力地解释您的文本需要发生什么。
这个Perl代码将您的示例输入转换为您的示例输出,但鉴于您的问题模糊不清,无法确定它是否正确地进行了正确的转换。
这是一个Unix过滤器(它从STDIN读取并写入STDOUT)。
#!/usr/bin/perl
use strict;
use warnings;
local $/ = ''; # Paragraph mode
my %seen;
while (<>) {
my $first_line = (split /\n/)[0];
if ($seen{$first_line}++) {
s/^if\b/#if/m;
s/^fi\b/#fi/m;
}
print;
}