我有一個看起來像這樣的表達式:在更換圓括號之間串
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');但是沒有工作=( –