我们在文件中有以下行
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