我已经阅读了很多帖子以了解如何使用 sed 正确转义字符串中的空格和特殊字符,但我仍然无法做到,这就是我想要实现的目标。
我有一个文件,其中包含一些像这样的字符串:
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.jsessionid=some_value"
我正在尝试使用以下内容替换“some_value”:
sed -i "s/^\(JAVA_OPTS=\"\$JAVA_OPTS[ \t]*-Dorg\.apache\.catalina\.jsessionid*=\s*\).*\$/\1$DORG_APACHE_CATALINA_JSESSIONID/" $JBOSS_CONFIGURATION/jboss.configuration
- $JBOSS_CONFIGURATION 是一个包含绝对 Linux 路径的变量。
- jboss.configuration 是我指向替换操作目标的文件。
- $DORG_APACHE_CATALINA_JSESSIONID 包含我想要的值而不是“some_value”。
请注意模式:
JAVA_OPTS="$JAVA_OPTS -D
始终存在,并且 org.apache.catalina.jsessionid 是我试图用这个脚本替换的变量值的一个例子。
有什么遗漏/错误?我也尝试使用 \s 转义空格但没有成功,并且回显整个给我以下信息:
echo "s/^\(JAVA_OPTS=\"\$JAVA_OPTS[ \t]*-Dorg\.apache\.catalina\.jsessionid*=\s*\).*\$/\1$DORG_APACHE_CATALINA_JSESSIONID/"
s/^\(JAVA_OPTS="$JAVA_OPTS[ \t]*-Dorg\.apache\.catalina\.jsessionid*=\s*\).*$/\1/
echo 是否像 sed 那样解释搜索模式?
非常欢迎任何信息/帮助/替代方法,谢谢大家