Regex 在两个不同字符串之间搜索和替换内容

Regex 在两个不同字符串之间搜索和替换内容,regex,sed,Regex,Sed,我的要求比现有答案稍微复杂一些 上面的代码块使用不同的rgb值重复多次。因此,简单的搜索和替换不起作用 我想用以下内容替换上述模块: \addplot3[% surf, z buffer=sort, colormap={my}{rgb255=(20,20,20) rgb255=(50,50,50) rgb255=(250,250,250) }, mesh/rows=21] 每次更换的内容相同 如前所述,我尝试了\addplot3[作为WORD1和},作为WORD2和我的要求surf,z buf

我的要求比现有答案稍微复杂一些

上面的代码块使用不同的rgb值重复多次。因此,简单的搜索和替换不起作用

我想用以下内容替换上述模块:

\addplot3[%
surf, z buffer=sort, colormap={my}{rgb255=(20,20,20) rgb255=(50,50,50) rgb255=(250,250,250) }, mesh/rows=21]
每次更换的内容相同

如前所述,我尝试了
\addplot3[
作为
WORD1
},
作为
WORD2
和我的要求
surf,z buffer=sort,colormap={my}{rgb255=(20,20,20)rgb255=(50,50)rgb255=(250250)
As
WORD3
在上面的答案链接中:

sed -i 's/(\addplot3[).*(},)/\1 surf, z buffer=sort, colormap={my}{ rgb255=(20,20,20) rgb255=(50,50,50) rgb255=(250,250,250) \2/g' multiparticle_random.tex
我得到以下错误:

sed: -e expression #1, char 126: unterminated `s' command
是否有人可以帮助完成此搜索和替换操作


也欢迎使用适用于Linux而非
sed
的解决方案。

您应该首先匹配以
\\addplot3\[%
(监视转义字符)开头的行,然后将下一行读入模式空间(
sed
每次只取一行)并执行替换命令。要使用
sed
(POSIX BRE)捕获组,应将其转义为
\(…\)
,或者使用
-r
选项:

sed '/\\addplot3\[%/{N;s/\(.*\)\n.*\(},.*\)/\1 surf, z buffer=sort, colormap={my}{ rgb255=(20,20,20) rgb255=(50,50,50) rgb255=(250,250,250) \2/g}' file

因此,您的替换是不变的,不会发生任何变量?例如,将
X
替换为
Y
,其中
X
Y
保持相同的内容。请也显示完整的
sed
命令。
sed-i的s/(\addplot3[)*(},)/\1 surf,z buffer=sort,colormap={my}{rgb255=(20,20,20)rgb255=(50,50,50)rgb255=(250250)\2/g'multiparticle_random.tex
是的替换是恒定的。答案有用吗?也许我可以改进。
sed '/\\addplot3\[%/{N;s/\(.*\)\n.*\(},.*\)/\1 surf, z buffer=sort, colormap={my}{ rgb255=(20,20,20) rgb255=(50,50,50) rgb255=(250,250,250) \2/g}' file