linux - 使用linux sed用特殊字符替换字符串

标签 linux bash replace sed special-characters

我已经阅读了很多帖子来了解如何使用 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 一样解释搜索模式?

非常欢迎任何信息/帮助/替代方法, 谢谢大家

最佳答案

echo 'JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.jsessionid=some_value"' | (export DORG_APACHE_CATALINA_JSESSIONID=FOO/BAR/FOOBAR; sed "s/^\(JAVA_OPTS=\"\$JAVA_OPTS[ \t]*-Dorg\.apache\.catalina\.jsessionid*=\s*\).*\$/\1${DORG_APACHE_CATALINA_JSESSIONID////\/}\"/")

注意 bash 扩展(为了转义任何可能导致 sed 出错的 /)以及 之后的额外 \" $DORG_APACHE_CATALINA_JSESSIONID 以便正确关闭双引号。除此之外,您的 sed 表达式对我有用,上面的命令输出以下结果:

JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.jsessionid=FOO/BAR/FOOBAR"

关于linux - 使用linux sed用特殊字符替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17144388/

相关文章:

linux - BASH:如何监视脚本执行失败

linux - Qt Windows + Linux 交叉编译

linux - 从 FTP 服务器下载所有文件

regex - 如何使用正则表达式添加千位分隔符?

R - 如何从多个匹配项中替换字符串(在数据框中)

linux - Artifactory 缓存文件显示的大小比其源文件大得多

linux - 如何将命令输出存储在一个变量中而不是一行?

c++ - 控制台 ./a.out 不工作

android - 为什么 nohup 仍然导致在 shell 脚本中运行的进程终止?

python - 用列表中的值替换 pandas 子集中的所有值