Sed替换所有字符直到第一个空格

时间:2013-08-23 12:13:38

标签: regex bash sed

我正在尝试替换配置文件中的一些路径。为此,我尝试使用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

但它不起作用。

2 个答案:

答案 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'