Bez awk?...Ale s awk je to tak jednoduché:
echo 'maps.google.com' | awk -F. '{print $NF}'
AWK je mnohem výkonnější nástroj, který můžete mít v kapse.-F pokud pro pole separatorNF je počet polí (také znamená index posledního)
Můžete zkusit něco takového:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
Vysvětlení
rev
obrátí "maps.google.com" namoc.elgoog.spam
cut
používá jako oddělovač tečku (tj. '.') a vybere první pole, což jemoc
- nakonec to znovu obrátíme, abychom dostali
com
Není možné použít pouze cut
. Zde je způsob použití grep
:
grep -o '[^,]*$'
Nahraďte čárku jinými oddělovači.
Vysvětlení:
-o
(--only-matching
) vypíše pouze tu část vstupu, která odpovídá vzoru (výchozí nastavení je tisknout celý řádek, pokud obsahuje shodu).[^,]
je třída znaků, která se shoduje s jakýmkoli jiným znakem než čárkou.*
odpovídá předchozímu vzoru nula nebo vícekrát, takže[^,]*
odpovídá nule nebo více znakům než čárka.$
odpovídá konci řetězce.- Když to dáme dohromady, vzor odpovídá nule nebo více nečárkám na konci řetězce.
- Pokud existuje více možných shod,
grep
preferuje tu, která začíná dříve. Bude tedy spárováno celé poslední pole.
Úplný příklad:
Pokud máme soubor s názvem data.csv obsahující
one,two,three
foo,bar
pak grep -o '[^,]*$' < data.csv
bude výstup
three
bar
Použijte rozšíření parametrů. To je mnohem efektivnější než jakýkoli druh externího příkazu cut
(nebo grep
) včetně.
data=foo,bar,baz,qux
last=${data##*,}
Viz BashFAQ #100 pro úvod do nativní manipulace s řetězci v bash.
Unrar všechny soubory v adresáři bez výzvy
Jak vyprázdnit mezipaměť CPU pro oblast adresního prostoru v Linuxu?