Ich habe einen Ausdruck, der wie folgt aussieht:Zeichenfolge in runden Klammern
when v(a.b.c.d.e.f.g) = v(m.n.o.x.y.z)
Ich brauche die endgültige Ausgabe zu sein:
when v(a.b^c^d^e^f:g) = v(m.n^o^x^y:z)
Einfach gesagt, wie kann ich jedes ".
ersetzen "durch" ^
"beginnend mit dem zweiten Auftreten von" .
"in jedem Ausdruck zwischen v();
, während der letzte" .
"durch" :
"in jedem Ausdruck zwischenersetzt wird? Beide v()
Ausdrücke erscheinen in derselben Zeile.
Ich habe versucht, die folgenden:
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\:/'
Dies ergibt folgendes:
a.b^c^d^e^f:g
m.n^o^x^y:z
ich wissen muss, wie man nach, dass ich die ursprüngliche Aussage mit dem modifizierten Text oben ersetzen kann, so dass, wenn endlich wie folgt aussehen wird:
when v(a.b^c^d^e^f:g) = v(m.n^o^x^y:z)
ich habe versucht, die folgende
$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');
aber es hat nicht funktioniert = (
Irgendwelche Ideen?
Was haben Sie bisher versucht? Bitte [bearbeite] deine Frage, um eine [mcve] einzubeziehen, die das Problem, das du hast, mit dem Code, den du geschrieben hast, aufzeigt. –
In Perl können Sie zum Beispiel versuchen: '$ str = ~ s {(\ w \ (\ w \.) (. *?) \. (\ W \))} {meine ($ erste, $ temp, $ zuletzt) = ($ 1, $ 2, $ 3); $ temp = ~ s /\./^/ g; $ zuerst. $ temp. ':'. $ last} ge' –
Ich habe folgendes versucht: $ ENV {"str"} = "wenn v (a.b.c.d.d.f.g) = v (m.n.o.x.y.z)"; $ str = ~ s {(\ w \ (\ w \.) (. *?) \. (\ W \))} {mein ($ erster, $ temp, $ last) = ($ 1, $ 2, $ 3); $ temp = ~ s /\./^/ g; $ zuerst. $ temp. ':'. $ last} ge; System ('echo $ str'); aber hat nicht funktioniert = ( –