我有一个文件(catalina.properties),其中包含以下特定行:
{{row.Name}
在另一个环境中,它看起来像这样:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar"
我需要一个命令,在等号的右侧附加一个额外的部分,并且在两种情况下均有效,结果将是:
common.loader=
或在另一种情况下:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.base}/extra/part.jar"
答案 0 :(得分:3)
sed 解决方案:
示例性测试输入文件testfile
:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar"
common.loader=
"ddd""sdsd"
sed 's~common\.loader=.*~&,"${catalina.base}/extra/part.jar"~; s/=,/=/' testfile
输出:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.base}/extra/part.jar"
common.loader="${catalina.base}/extra/part.jar"
"ddd""sdsd"
答案 1 :(得分:1)
您能否请尝试关注awk并告诉我们这是否对您有所帮助。 非单一衬里形式的解决方案:
awk -v base="\${catalina.base}/lib" -v ja="\${catalina.base}/lib/*.jar" -v s1="\"" -v extra_part="\${catalina.base}/extra/part.jar" -v s2="," '
/common.loader=$/{
sub(/.*/,"&"s1 base s1 s2 s1 ja s1 s2 s1 extra_part s1);
print;
next
}
/common.loader=.*jar\"/{
sub(/.*/,"&" s2 s1 extra_part s1);
print;
next
}
1
' Input_file
一种形式的解决方案:
awk -v base="\${catalina.base}/lib" -v ja="\${catalina.base}/lib/*.jar" -v s1="\"" -v extra_part="\${catalina.base}/extra/part.jar" -v s2="," '/common.loader=$/{sub(/.*/,"&"s1 base s1 s2 s1 ja s1 s2 s1 extra_part s1);print;next} /common.loader=.*jar\"/{sub(/.*/,"&" s2 s1 extra_part s1);print;next}1' Input_file
此外,由于您需要编辑Input_file本身,因此您可以在上述代码的末尾添加以下代码,并且可以执行相同的操作
.... > tmp_file && mv tmp_file Input_file
EDIT1:如果您只想在其中一个条件中添加额外部分,那么您可以尝试关注。
awk -v s1="\"" -v extra_part="\${catalina.base}/extra/part.jar" '
/common.loader=/{
s2=$0 ~ /=$/?"":",";
sub(/.*/,"&" s2 s1 extra_part s1);
print;
next
}
1' Input_file