我正在尝试替换配置文件中的一些路径。为此,我尝试使用sed。
我的文件看起来像这样:
-Djava.util.logging.config.file=/tmp/tmp/tmp/config bla.bla
我想替换/tmp/tmp/tmp/config
并保持bla.bla不受影响。
根据{{3}}和http://regexpal.com/,我应该使用
sed -e 's/logging.config.file=[^\s]+/logging\.config\.file\=\/new/g' file
但它不起作用。
答案 0 :(得分:2)
这会将/tmp/tmp/...
替换为aaa
:
$ sed 's/\(.*=\)[^ ]* \(.*\)/\1 aaa \2/g' <<< "-Djava.util.logging.config.file=/tmp/tmp/tmp/config bla.bla"
-Djava.util.logging.config.file= aaa bla.bla
它会在=
中“保存”\1
以内的任何内容。然后将所有内容提取到空间。最后在\2
中“保存”字符串的其余部分。
替换是通过回复\1
+“新字符串”+ \2
完成的。
答案 1 :(得分:1)
\s
不支持 sed
。此外,必须对+
进行反对以获得其特殊含义。我也会反斜杠以阻止它们匹配任何东西:
sed -e 's/logging\.config\.file=[^[:space:]]\+/logging\.config\.file\=\/new/g'
或更短
sed -e 's%\(logging\.config\.file=\)[^[:space:]]\+%\1/new%g'