如何在变量末尾添加带有字符串的行?

如何在变量末尾添加带有字符串的行?

我们在文件中有以下行

more file


USA_FORMAT="-XX:LOP83746=5M -XX:+YU3635-2837"

我们还想在末尾附加以下字符串(行)美国格式多变的

/usr/jdk64/jdk1.8.0_112/man/man1/jarsigner.1 /usr/hdp/2.6.4.0-91/spark2/examples/jars 6 3 END

"usr/jdk64/jdk1.8.0_112/man/man1/jarsigner.1 /usr/hdp/2.6.4.0-91/spark2/examples/jars 6 3 END"如何通过 sed 或 Perl 一行/其他方法在变量中追加行?

注意 - 附加之前的变量内容可以不同。

预期输出:

USA_FORMAT="-XX:LOP83746=5M -XX:+YU3635-2837 usr/jdk64/jdk1.8.0_112/man/man1/jarsigner.1 /usr/hdp/2.6.4.0-91/spark2/examples/jars 6 3 END"

答案1

sed -e '/^USA_FORMAT=/s,"$, /usr/.../jarsigner.1 /usr/.../jars 6 3 END",'

即,在以 开头的行上USA_FORMAT=,将结尾替换"/usr/...END"(最后的引号位于新字符串的末尾)。如果它是 shell 脚本,您实际上可以忽略现有的引号,而是添加带有一组新引号的新部分。你会得到var="foo""bar",但这完全有效。

或者在 Perl 中类似:

perl -pe 's,"$, /usr/.../jarsigner.1 /usr/.../jars 6 3 END", if /^USA_FORMAT=/'

或者

export repl='/usr/ ... END'
perl -pe 's/"$/ $ENV{repl}"/ if /^USA_FORMAT=/'

因此,您不需要s根据替换字符串(不)包含的内容来选择分隔符。

答案2

让 bash shell 终端上的 'd' 中的数据执行;

append='/usr/jdk64/jdk1.8.0_112/man/man1/jarsigner.1 /usr/hdp/2.6.4.0-91/spark2/examples/jars 6 3 END'
sed -E "/USA_FORMAT=.+/ s~~&$append~" d

相关内容