Bash

如何在變數末尾附加字元串?

  • April 8, 2019

我們在文件中有以下行

more file


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

我們還想在USA_FORMAT變數的末尾附加以下字元串(行)

/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"
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根據替換字元串(不)包含的內容來選擇分隔符。

引用自:https://unix.stackexchange.com/questions/506087