我有一个看起来像这样的表达式:在更换圆括号之间串
when v(a.b.c.d.e.f.g) = v(m.n.o.x.y.z)
我需要的最终输出是:
when v(a.b^c^d^e^f:g) = v(m.n^o^x^y:z)
简单地说,我怎么可以相互替换“.
“在v();
之间的每个表达中从第二次出现的”.
“开始的”^
“开始,而在之间的每个表达中用”:
“代替最后的”.
“?两个v()
表达式都显示在同一行上。
我试过如下:
setenv test "when v(a.b.c.d.e.f.g) = v(m.n.o.x.y.z)"
echo $test | awk -F"(" '{for(i=2;i<=NF;i++){if($i~/\)/){sub(").*","",$i)};print $i}}' | \
sed -E 's/\./\^/g2' | sed 's/\(.*\)\^/\1\:/'
这给出了以下:
a.b^c^d^e^f:g
m.n^o^x^y:z
我需要知道如何在那之后我可以用修改后的文本替换上述原来的语句,因此如果最后看起来像这样:
when v(a.b^c^d^e^f:g) = v(m.n^o^x^y:z)
我试过以下
$ENV{"str"} = "when v(a.b.c.d.e.f.g) = v(m.n.o.x.y.z)";
$str =~ s{(\w(\w\.)(.*?)\.(\w))}{
my ($first, $temp, $last) = ($1, $2, $3);
$temp =~ s/\./^/g;
$first . $temp . ':' . $last
}ge;
system('echo $str');
,但它没有工作=(
任何想法?
你到目前为止尝试过什么?请[编辑]您的问题,以包含[mcve],以证明您使用您编写的代码所遇到的问题。 –
在Perl中,你可以尝试例如:'$ str =〜s {(\ w \(\ w \。)(。*?)\。(\ w \))} {my($ first,$ temp,$最后)=($ 1,$ 2,$ 3); $ temp =〜s /\./^/ g; $优先。 $ temp。 ':'。 $ last} ge' –
我尝试了以下方法:$ vb {“str”} =“当v(a.b.c.d.e.f.g)= v(m.n.o.x.y.z)”; ($ first,$ temp,$ last)=($ 1,$ 2,$ 3)$ str =〜s {(\ w \(\ w \。)(。*?)\。(\ w \)) ); $ temp =〜s /\./^/ g; $优先。 $ temp。 ':'。 $最后} GE; system('echo $ str');但是没有工作=( –