如何在SED commad中使用引号?

时间:2018-05-07 12:33:19

标签: bash sed

我有一个名为“/java.conf”的文件,下面有一行

JAVA_OPTS="-Xms8250m -Xmx9786m -XX:MetaspaceSize=256m -XX:MinMetaspaceFreeRatio=20 -XX:MaxMetaspaceFreeRatio=40"

我想替换下面的行,

JAVA_OPTS="-Xms4092m -Xmx4092m -XX:MetaspaceSize=256m -XX:MinMetaspaceFreeRatio=20 -XX:MaxMetaspaceFreeRatio=40"

我试过以下,

JVM_HEAP_SIZE="-Xms4092m -Xmx4092m -XX:MetaspaceSize=256m -XX:MinMetaspaceFreeRatio=20 -XX:MaxMetaspaceFreeRatio=40"

sed -i  "s/-Xms.*/$JVM_HEAP_SIZE/g" /java.conf

输出:

JAVA_OPTS="-Xms4092m -Xmx4092m -XX:MetaspaceSize=256m -XX:MinMetaspaceFreeRatio=20 -XX:MaxMetaspaceFreeRatio=40

问题: 在该行的末尾缺少双引号(“)。

期待 如果我在最后得到一个额外的,那么问题就解决了。

基本上我试图通过使用VARIABLE来改变“-Xms”和“-Xmx”值。 我需要使用变量,因为值可能会不时变化。

提前致谢!

2 个答案:

答案 0 :(得分:0)

使用以下内容:

JVM_HEAP_SIZE='-Xms4092m -Xmx4092m -XX:MetaspaceSize=256m -XX:MinMetaspaceFreeRatio=20 -XX:MaxMetaspaceFreeRatio=40"'

sed -i "s/-Xms.*/$JVM_HEAP_SIZE/g" /java.conf

文本未在单引号内展开,因此双引号保持不变并替换sed正则表达式匹配的引号。

答案 1 :(得分:0)

你的sed正则表达式匹配从“-Xms”到行尾的所有内容(包括末尾的双引号)。你只需要将双引号作为替换字符串的一部分:

sed -i "s/-Xms.*/${JVM_HEAP_SIZE}\"/" /java.conf

请注意,由于搜索模式与整行匹配,因此无需将“g”放在命令的末尾。