У меня есть выражение, которое выглядит следующим образом:Заменить строку в круглых скобках
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()
? Оба выражения 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, $ last) = ($ 1, $ 2, $ 3); $ temp = ~ s /\./^/ g; $ сначала. $ temp. ':'. $ last} ge' –
Я пробовал следующее: $ ENV {"str"} = "когда 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; $ сначала. $ temp. ':'. $ Последний} GE; система ('echo $ str'); но не работает = ( –