繁体   English   中英

如何使用Shell脚本附加到特定行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM