2

我正在尝试替换配置文件中的一些路径。为此,我正在尝试使用 sed。

我的文件看起来像这样:

-Djava.util.logging.config.file=/tmp/tmp/tmp/config bla.bla

我想替换/tmp/tmp/tmp/config并保持 bla.bla 不变。根据http://regexpal.com/http://regexr.com?362qc我应该使用

sed -e 's/logging.config.file=[^\s]+/logging\.config\.file\=\/new/g' file

但它不起作用。

4

2 回答 2

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+ "new string" +来完成的\2

于 2013-08-23T12:15:54.090 回答
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'
于 2013-08-23T12:24:26.573 回答