Ich habe eine Zeichenfolge wie rev00000010
und ich möchte nur die letzte Zahl, in diesem Fall 10.
Ich habe das versucht:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
beide geben nichts zurück, obwohl der Regex korrekt zu sein scheint (versucht mit Regexr )
sed
regular-expression
Michael Niemand
quelle
quelle
Antworten:
Die Befehle, die Sie übergeben haben,
sed
bedeuten: Wenn eine Zeile mit dem regulären Ausdruck übereinstimmt, löschen Sie sie . Das willst du nicht.Dies bedeutet: Entfernen Sie in jeder Zeile die Umdrehung, gefolgt von einer beliebigen Anzahl von Nullen.
Auch
sed
für so eine einfache Sache brauchen Sie nicht . Verwenden Sie einfach bash und seine Parametererweiterung :quelle
POSIXly:
Würde alles links von der am weitesten links stehenden Ziffer ungleich Null entfernen.
Bournely / universell:
quelle
test='rev 003A0.1056'
wird produzierennumber="3A0.1056"
. Der zweite wird auf einem beliebigen Leerzeichen003A0.1056
unterbrochen , der gleiche Wert wird erzeugt: aus dem Ausdruck.Wenn Sie die Variable TEST bereits haben, drucken Sie sie einfach mit entferntem Buchstaben aus
oder
Verwenden Sie nicht
%d
oderecho
-Befehl, da Zahlen mit führenden0
als verstanden werdenoctal
quelle
Einige weitere Optionen (obwohl ich auch empfehle, die von @choroba vorgeschlagene Parametererweiterung zu verwenden):
Verwenden Sie
sed
oderperl
, um alles außer den letzten beiden Zeichen durch die letzten beiden Zeichen zu ersetzen. Dies löscht effektiv alles außer den letzten beiden.Setzen Sie
awk
das Feldtrennzeichen auf 2 oder mehr Nullen und drucken Sie das letzte Feld:Extrahieren Sie nur die letzten beiden Zeichen:
Drucken Sie nur die zehntletzten Bytes:
Beachten Sie, dass alle oben genannten Verwendungen
<<<$var
ein Bash-Konstrukt sind. Um es in anderen Shells zu verwenden, wechseln Sie zuecho "$TEST" | command
.quelle
awk -F"[a-z]" '{print +$NF}'
Um die "letzte Zahl" zu erhalten, wählen Sie eine beliebige Ziffernfolge am Ende der Zeichenfolge aus und konvertieren Sie sie in eine Dezimalzahl:
Mit Bash:
Mit grep:
quelle