awk / sed + ersetze nur das zweite Zeichen mit einem Leerzeichen

2

Bitte geben Sie an, wie Sie nur das zweite "." Zeichen aus der Versionsnummer mit awk

Ich muss die Syntax für Linux & amp; Solaris

Ich schreibe die

  sed "s'/\./ /g'" - 

aber diese Syntax entfernen alle "." von der Versionsnummer

zum Beispiel (Versionsnummer vorher)

 34.34.55.4

nach sed manipulation wird

 34.34 55.4
Eytan
quelle
Haben Sie stattdessen awk in Betracht gezogen? Dies mit SED zu tun, wird schmerzhaft sein, weil es nur sehr begrenzt in der Lage ist, mit jeder Art von Staat umzugehen.
Zoredache
1
@Zoredache obwohl ich awk normalerweise auch empfehle, es ist nicht so schmerzhaft in sed;)
SiegeX
ok ich aktualisiere die frage
Eytan

Antworten:

3
echo -e '1.2.3.4\n2.3.4\n5.6.7.8' | sed 's/\([^.]*\.[^.]*\)\./\1 /'

Der Teil in geschweiften Klammern entspricht "etwas ohne Punkt, ein Punkt, etwas ohne Punkt". \ 1 im Ersetzungstext verweist dann auf diese Teilübereinstimmung.

Die andere Lösung ist jedoch wohl weitaus eleganter ;-)

jakob
quelle
2
$ sed 's/\./ /2' <<<'34.34.55.4'
34.34 55.4
SiegeX
quelle
Diese Syntax funktioniert unter Solaris nicht
Eytan
@Eytan der <<<'34.34.55.4' Teil war nur ein Beispiel für die Eingabe. Ersetzen Sie es einfach durch einen Dateinamen oder leiten Sie etwas mit Echo weiter. Der sed Befehl wird sicherlich funktionieren.
SiegeX
2

Verwenden GNU Awk:

Befehl:

awk '$0 = gensub( /\./, " ", 2 )' <<<"34.34.55.4"

Ausgabe:

34.34 55.4
Birei
quelle