【发布时间】:2021-01-26 17:11:22
【问题描述】:
我想要
oy 1 x 1 x 1
1 x 1 x 1
成为
oy 1 y 1 y 1
1 x 1 x 1
(基本上,如果行以oy开头,则将x替换为y,重复使用y。
我试过了
echo "oy 1 x 1 x 1" | sed -E "s/(o(.)(.*))x/\1\2/g"
echo "oy 1 x 1 x 1" | perl -pe "s/(?<=o)(.)(.*)x/\1\2\1/g"
echo "oy 1 x 1 x 1" | perl -pe "s/o(.)(.*)\Kx/\1/g"
但每个只替换最后一次。
这些非贪婪的变种
echo "oy 1 x 1 x 1" | perl -pe "s/(?<=o)(.)(.*?)x/\1\2\1/g"
echo "oy 1 x 1 x 1" | perl -pe "s/o(.)(.*?)\Kx/\1/g"
只替换第一个出现的地方。
我还能尝试什么?
【问题讨论】:
-
perl不支持可变长度后视,否则只有正则表达式的解决方案是可能的..