
So löschen Sie das zweite Zeichen "." aus der Zeile
was ich habe, ist dies (aber es entfernt den ersten "." aus der Ausgabe
uname -r | sed s'/\./ /'
2 6.18-164.2.1.el5PAE
wobei ich folgende Ausgabe benötige
2.6 18-164.2.1.el5PAE
Antwort1
Fügen Sie einfach N an das Ende des Befehls an, damit er mit der N-ten Übereinstimmung übereinstimmt, und zwar wie folgt:
uname -r | sed 's/\./ /2'
Aber wofür brauchst du es?
Von der info
Seite weiter sed
:
Auf den Befehl „s“ können null oder mehrere der folgenden FLAGS folgen:
G
Apply the replacement to _all_ matches to the REGEXP, not just the first.
NUMMER
Only replace the NUMBERth match of the REGEXP.
Antwort2
Hier sind einige Möglichkeiten, die Sekunde .
aus einer Zeile einer Datei zu entfernen (sie wirken sich auf alle Zeilen der Datei aus):
sed
. Dubereitswas wahrscheinlich der beste Weg ist, aber hier ist ein anderer:sed 's/\([^.]*\.[^.]*\)\./\1 /' file
Dies sucht nach der längsten Nicht-Strecke
.
([^.]*
), dann nach einem.
(\.
), dann nach der nächsten Nicht-Strecke.
und schließlich nach einem.
(\.
). Die Klammern erfassen die Muster, sodass wir darauf als verweisen können\1
. Daher löscht der obige Befehl einfach das zweite.
und ersetzt es durch ein Leerzeichen.Wenn Sie GNU haben
sed
(Standard unter Linux), können Sie es wie folgt vereinfachen:sed -r 's/([^.]*\.[^.]*)\./\1 /' file
Perl
perl -pe 's/([^.]*\.[^.]*)\./\1 /' file
oder
perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file
awk
(Ich bin sicher, es gibt einen besseren Weg)awk -F. '{printf "%s.%s ",$1,$2; for(i=3;i<NF;i++){printf "%s.",$(i); }print $NF}' file