[英]How to append to a specific line using shell script?
我有一个特定行的文件(catalina.properties) :
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"
或在其他情况下:
common.loader="${catalina.base}/extra/part.jar"
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"
您能否尝试跟随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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.