Shell 使用sed命令替换模式

Shell 使用sed命令替换模式,shell,sed,Shell,Sed,我想用sed命令替换一个模式。我有一个包含以下数据的文件 50%%R39%35%R43%-35%R4Z%10%RRN%1110%R0M%-950 现在我需要将模式%RRN%%替换为%RRN%0%。输出应该是这样的 50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950 为此,我使用了下面的命令 sed 's/%RRN%\(.*\)%/%RRN%0%/g' 但是我没有得到正确的输出。它将如下所示 50%R39%35%R43%-35%R4Z%10%RRN%0%-95

我想用sed命令替换一个模式。我有一个包含以下数据的文件

50%%R39%35%R43%-35%R4Z%10%RRN%1110%R0M%-950
现在我需要将模式
%RRN%%
替换为
%RRN%0%
。输出应该是这样的

50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950
为此,我使用了下面的命令

sed 's/%RRN%\(.*\)%/%RRN%0%/g' 
但是我没有得到正确的输出。它将如下所示

50%R39%35%R43%-35%R4Z%10%RRN%0%-950

请在这方面帮助我

更好的解决方案是使用
[^%]\+
代替
*

sed 's/%RRN%\([^%]\+\)%/%RRN%0%/g'
输出:

50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950

如果您想尝试使用
awk
,可以执行以下操作:

echo '50%%R39%35%R43%-35%R4Z%10%RRN%1110%R0M%-950' | awk '{sub(/%RRN%[^%]*%/,"%RRN%0%")}1'
50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950

抱歉,Jksah,我已经编辑了这个问题…输出应该如下所示
50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950
我想要带有
%RRN%0%
的新模式,而在您的输出中,它是相同的
%RRN%1110%
@vishal您是否检查了我编辑的正则表达式?我已经更新了正则表达式以及output@jkshah是正则表达式中的
+
在第一篇文章中产生了问题,使用
*
应该做到:
sed的/%RRN%[^%]*/%RRN%0%/g'
@Jotne同意我需要逃避这个问题。现在是使用
+
还是
*
取决于需求
perl -pe '$a="0%";s/(%RRN%)[^%]*%/$1$a/g'