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”/“有什么问题?