1

我正在尝试匹配以下之间有空格的模式。

         -DsomeArg=some value 

并使用 sed 命令将其替换为以下模式。

         -DsomeArg="some value"

中间可以有任意数量的空格。我尝试了以下命令,但它不起作用。

          sed 's/^\(-D.*\)=(.\+\s\+.\+)/\1="\2"/' test.dat

其中 .* 代替 .+ 起作用,但我想匹配一个或多个模式。我无法找到我做错了什么。

4

2 回答 2

1
cat /tmp/test | sed -r 's/^(-D.*?)=(.+\s+.+)/\1="\2"/'
-DsomeArg="some value"

希望这会有所帮助:)

于 2013-01-15T19:09:52.187 回答
0

这可以满足您的要求:

sed 's/=\(.*\)/="\1"/'

或更短一点:

sed 's/=/="/;s/$/"/'

但我觉得这个故事比你说的要多。就像,您是否希望某些文本跟在您想要保留在引号之外的“某个值”之后?之前是否-DsomeArg有您不想匹配的内容?

使用正则表达式,上下文就是一切。

于 2013-01-16T06:29:06.823 回答