Reputation: 554
I have a file (catalina.properties) with a specific line of:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar"
In another environment it looks like this:
common.loader=
I would need a command which appends an extra part at the right side of the equal sign, and works in both of the 2 cases, so the result would be:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.base}/extra/part.jar"
or in the other case:
common.loader="${catalina.base}/extra/part.jar"
Upvotes: 1
Views: 99
Reputation: 133770
Could you please try following awk and let us know if this helps you. NON-ONE liner form of solution:
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
One line form of solution:
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
Also as you need the Input_file itself to be edited, so you could add following code at the end of the above codes and could do the same
.... > tmp_file && mv tmp_file Input_file
EDIT1: If you want to add only extra part in either of the conditions then you could try following.
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
Upvotes: 1
Reputation: 92904
sed solution:
exemplary test input file 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
The output:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.base}/extra/part.jar"
common.loader="${catalina.base}/extra/part.jar"
"ddd""sdsd"
Upvotes: 3