Senza awk?...Ma è così semplice con awk:
echo 'maps.google.com' | awk -F. '{print $NF}'
AWK è uno strumento molto più potente da avere in tasca.-F se per field separatorNF è il numero di campi (sta anche per l'indice dell'ultimo)
Potresti provare qualcosa del genere:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
Spiegazione
revinverte "maps.google.com" inmoc.elgoog.spamcutusa il punto (cioè '.') come delimitatore e sceglie il primo campo, che èmoc- infine, lo invertiamo di nuovo per ottenere
com
Non è possibile usare solo cut . Ecco un modo per usare grep :
grep -o '[^,]*$'
Sostituisci la virgola per altri delimitatori.
Spiegazione:
-o(--only-matching) emette solo la parte dell'input che corrisponde al modello (l'impostazione predefinita è stampare l'intera riga se contiene una corrispondenza).[^,]è una classe di caratteri che corrisponde a qualsiasi carattere diverso da una virgola.*corrisponde al modello precedente zero o più volte, quindi[^,]*corrisponde a zero o più caratteri diversi dalla virgola.$corrisponde alla fine della stringa.- Mettendo insieme questo, il modello corrisponde a zero o più caratteri non virgola alla fine della stringa.
- Quando ci sono più possibili corrispondenze,
greppreferisce quello che inizia prima. Quindi verrà abbinato l'intero ultimo campo.
Esempio completo:
Se abbiamo un file chiamato data.csv contenente
one,two,three
foo,bar
poi grep -o '[^,]*$' < data.csv produrrà
three
bar
Utilizzare un'espansione dei parametri. Questo è molto più efficiente di qualsiasi tipo di comando esterno, cut (o grep ) incluso.
data=foo,bar,baz,qux
last=${data##*,}
Vedi BashFAQ #100 per un'introduzione alla manipolazione nativa delle stringhe in bash.