Bash 用于查找和替换模式的Unix sed命令

Bash 用于查找和替换模式的Unix sed命令,bash,shell,unix,sed,Bash,Shell,Unix,Sed,我试图匹配下面的模式,它之间有空格 -DsomeArg=some value 并使用sed命令将其替换为以下模式 -DsomeArg="some value" 中间可以有任意数量的空格。我试着按命令做,但不起作用 sed 's/^\(-D.*\)=(.\+\s\+.\+)/\1="\2"/' test.dat 其中as.*代替.+,但我想匹配一个或多个模式。我无法发现我做错了什么。请帮帮我 cat /tmp/test | sed -

我试图匹配下面的模式,它之间有空格

         -DsomeArg=some value 
并使用sed命令将其替换为以下模式

         -DsomeArg="some value"
中间可以有任意数量的空格。我试着按命令做,但不起作用

          sed 's/^\(-D.*\)=(.\+\s\+.\+)/\1="\2"/' test.dat
其中as.*代替.+,但我想匹配一个或多个模式。我无法发现我做错了什么。请帮帮我

cat /tmp/test | sed -r 's/^(-D.*?)=(.+\s+.+)/\1="\2"/'
-DsomeArg="some value"
希望这会有所帮助:)


希望这会有所帮助:)

这符合您的要求:

sed 's/=\(.*\)/="\1"/'
或者再短一点:

sed 's/=/="/;s/$/"/'
但我觉得这个故事比你说的还要多。比如,您是否希望在“some value”后面加上一些文本,并将其保留在引号之外?是否在
-DsomeArg
前面有您不想匹配的内容


对于正则表达式,上下文就是一切。

这满足了您的要求:

sed 's/=\(.*\)/="\1"/'
或者再短一点:

sed 's/=/="/;s/$/"/'
但我觉得这个故事比你说的还要多。比如,您是否希望在“some value”后面加上一些文本,并将其保留在引号之外?是否在
-DsomeArg
前面有您不想匹配的内容


对于正则表达式,上下文就是一切。

值的结尾是什么?行尾?sed的/\(-D.*=\)\(.*\)/\1“\2”/“”有什么问题?值的结尾是什么?行尾?sed的/\(-D.*=\)\(.*\)/\1“\2”/“有什么问题?