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í
revobrátí "maps.google.com" namoc.elgoog.spamcutpouží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,
greppreferuje 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?