Ohne awk ?...Aber es ist so einfach mit awk:
echo 'maps.google.com' | awk -F. '{print $NF}'
AWK ist ein viel leistungsfähigeres Werkzeug, das man in der Tasche haben sollte. -F wenn für FeldtrennerNF die Anzahl der Felder ist (steht auch für den Index des letzten)
Sie könnten so etwas versuchen:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
Erklärung
revkehrt "maps.google.com" zumoc.elgoog.spamumcutverwendet Punkt (dh '.') als Trennzeichen und wählt das erste Feld, dasmocist- Zuletzt kehren wir es wieder um, um
comzu erhalten
Es ist nicht möglich, nur cut zu verwenden . Hier ist eine Möglichkeit, grep zu verwenden :
grep -o '[^,]*$'
Ersetzen Sie das Komma für andere Trennzeichen.
Erklärung:
-o(--only-matching) gibt nur den Teil der Eingabe aus, der mit dem Muster übereinstimmt (standardmäßig wird die gesamte Zeile gedruckt, wenn sie eine Übereinstimmung enthält).[^,]ist eine Zeichenklasse, die jedem anderen Zeichen als dem Komma entspricht.*stimmt mit dem vorhergehenden Muster null oder öfter überein, also[^,]*stimmt mit null oder mehr Nicht-Komma-Zeichen überein.$entspricht dem Ende der Zeichenfolge.- Zusammengenommen entspricht das Muster null oder mehr Nicht-Komma-Zeichen am Ende der Zeichenfolge.
- Wenn es mehrere mögliche Übereinstimmungen gibt,
grepbevorzugt diejenige, die am frühesten beginnt. Das gesamte letzte Feld wird also abgeglichen.
Vollständiges Beispiel:
Wenn wir eine Datei namens data.csv haben enthält
one,two,three
foo,bar
dann grep -o '[^,]*$' < data.csv wird ausgegeben
three
bar
Verwenden Sie eine Parametererweiterung. Dies ist viel effizienter als jede Art von externem Befehl, cut (oder grep ) enthalten.
data=foo,bar,baz,qux
last=${data##*,}
Siehe BashFAQ #100 für eine Einführung in die native String-Manipulation in Bash.