Příkaz look
v Linuxu slouží k prohledávání souborů a zobrazení řádků, které začínají zadaným slovem nebo frází. Je však důležité si uvědomit, že jeho chování se může lišit napříč různými distribucemi Linuxu. Tento návod vám ukáže, jak s ním pracovat efektivně.
Rozdíly v chování příkazu look v Ubuntu
Při zkoumání tohoto, na první pohled jednoduchého příkazu, jsem narazil na dva klíčové problémy: rozdíly v implementaci a nedostatečnou dokumentaci. Článek byl testován v distribucích Ubuntu, Fedora a Manjaro, kde byl příkaz look
přítomen ve všech. Problém však spočíval v rozdílném chování příkazu v Ubuntu oproti ostatním distribucím. Podle oficiálních manuálových stránek Ubuntu by se chování mělo shodovat, nicméně praxe ukázala něco jiného.
Zásadní rozdíl spočívá v tom, že tradičně příkaz look
využívá binární vyhledávání, zatímco verze v Ubuntu používá lineární vyhledávání. Ačkoliv online manuálové stránky pro Ubuntu (verze 18.04, 18.10 a 19.04) tvrdí opak, lokální manuálové stránky v Ubuntu správně uvádějí, že je použito lineární vyhledávání. Existuje nicméně přepínač, kterým lze vynutit binární vyhledávání. V ostatních distribucích možnost volby mezi metodami vyhledávání nenajdeme.
man look
Prohlédnutím lokální manuálové stránky můžeme jasně vidět část, která popisuje použití lineárního vyhledávání.
Závěrem lze tedy říci, že je vždy důležité kontrolovat lokální manuálové stránky.
Lineární vs. binární vyhledávání
Binární vyhledávání je obecně rychlejší a efektivnější než lineární. Rozdíl je nejvíce znát při práci s velkými soubory. Nicméně binární vyhledávání vyžaduje, aby byl prohledávaný soubor seřazen. Pokud jej nechcete seřadit, můžete si vytvořit seřazenou kopii a s tou pracovat.
Tuto metodu si ukážeme později. Prozatím si pamatujte, že na Fedoře, Manjaru a většině ostatních distribucí Linuxu budete pravděpodobně muset vytvořit seřazenou kopii pro efektivní práci s příkazem look
.
Instalace slovníku
Příkaz look
může prohledávat libovolný textový soubor, včetně souboru se slovy „words“, který slouží jako systémový slovník.
V Manjaru je potřeba tento soubor nainstalovat. Použijte následující příkaz:
sudo pacman -Syu words
Základní použití příkazu look
V tomto návodu si ukážeme práci s textem básně Edwarda Leara s názvem „The Jumblies“.
Prohlédneme si obsah tohoto souboru pomocí příkazu:
less the-jumblies.txt
Zde je úryvek básně. Vzhledem k tomu, že používáme Ubuntu, pracujeme s neseřazeným souborem. V případě Fedory a Manjara by bylo nutné pracovat s seřazenou kopií, jak si ukážeme později.
Pokud chceme vyhledat všechny řádky, které začínají slovem „oni“, získáme přehled o tom, co Jumblies prováděli:
look They the-jumblies.txt
Příkaz look
nám vrátí tyto řádky:
Ignorování velikosti písmen
Pro ignorování rozdílu mezi velkými a malými písmeny použijte volbu -f
(ignore case). Opět použijeme hledané slovo „oni“, ale tentokrát s malým počátečním písmenem.
look -f they the-jumblies.txt
Výsledky nyní zahrnují jeden řádek navíc:
Řádek začínající „ONI“ byl v předchozích výsledcích vynechán, protože byl celý napsán velkými písmeny. Ignorování velikosti písmen nám umožňuje tento řádek do výsledků zahrnout.
Použití příkazu look se seřazeným souborem
Pokud vaše distribuce Linuxu používá tradiční verzi příkazu look
s binárním vyhledáváním, musíte buď seřadit soubor, nebo použít jeho seřazenou kopii.
Zopakujme hledání slova „Oni“, tentokrát na Manjaru.
Jak vidíte, nebyly vráceny žádné výsledky. Přitom víme, že v básni jsou řádky začínající „Oni“.
Vytvořme tedy seřazenou kopii. Pokud chcete použít volby -f
(ignorovat velikost písmen) nebo -d
(pouze alfanumerické znaky a mezery) s příkazem look
, musíte tyto volby použít i při třídění souboru.
Volba -o
(output) nám umožňuje definovat název souboru, do kterého se mají uložit setříděné řádky, v tomto případě „sorted.txt“.
sort -f -d the-jumblies.txt -o sorted.txt
Nyní zkusíme použít příkaz look
na soubor „sorted.txt“, tentokrát s volbami -f
a -d
:
Nyní dostáváme očekávané výsledky.
Omezení se na alfanumerické znaky a mezery
Pokud chcete, aby příkaz look
ignoroval vše, co není alfanumerický znak nebo mezera, použijte volbu -d
(alphanumeric).
Zkusme vyhledat slova začínající na „Ach“.
look -f oh the-jumblies.txt
Příkaz nevrátil žádné výsledky.
Zkusme to znovu a řekněme look
, aby ignoroval cokoliv kromě alfanumerických znaků a mezer, tedy i interpunkci a symboly.
look -f -d oh the-jumblies.txt
Tentokrát dostáváme výsledek. Dříve jsme tento řádek nenašli, protože uvozovky a vykřičník narušovaly hledání.
Definování ukončovacího znaku
Příkazu look
můžete také nastavit konkrétní znak, který se bude brát jako ukončovací. Standardně se jako ukončovací znaky používají mezery a konce řádků.
Volba -t
(terminating character) nám umožňuje specifikovat vlastní znak. V tomto příkladu použijeme apostrof. Ten musíme uvést s únikovým znakem (zpětné lomítko), aby look
neinterpretoval apostrof jako začátek řetězce.
Hledaný výraz také musíme uvést v uvozovkách, protože obsahuje mezeru, a hledáme tedy dvě slova.
look -f -t \' "they call" the-jumblies.txt
Výsledky odpovídají hledanému výrazu, který končí apostrofem, který jsme si zvolili jako ukončovací znak.
Použití příkazu look bez souboru
Pokud v příkazu nezadáte název souboru, použije look
systémový slovník.
Zkusíme například příkaz:
výsledkem budou následující slova:
Jedná se o všechna slova v systému, která začínají na „kruh“.
Závěrem
To je vše, co potřebujete vědět o příkazu look
.
Jakmile pochopíte, že chování se může lišit mezi distribucemi a zjistíte, jestli vaše verze používá binární nebo lineární vyhledávání, je práce s ním poměrně jednoduchá.