LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Linux v příkazech - čtení a zpracování textu

Výpis textu, hledání řetězců v textu a jejich případná záměna, třídění a základní operace s textem bez použití textového editoru, utility pro práci s textem.

1.12.2004 10:00 | o.k. | Články autora | přečteno 82581×

Tento díl bude v porovnání s ostatními trochu odlehčenější, ale i tak není dobré příkazy na práci s textem v Linuxu podceňovat, protože drtivá většina konfiguračních souborů v Linuxu je textová a pro efektivní práci s nimi je zapotřebí zvolit pro dané zpracování textu ten nejvhodnější nástroj.

Pro čtení textových souborů v Linuxu slouží příkaz more či less. Tato dvojice příkazů vyvolává od nepaměti spoustu slovních soubojů, flamewar chcete-li, stejně tak jako třeba programy vim a emacs či zavaděče Linuxu lilo a grub a mohl bych jmenovat ještě spoustu dalších, ale nebudu, protože to je zbytečné tlachání o ničem.

Pravdou je, že se dříve možná více používal program less (a možná je tomu tak dodnes), který toho uměl i přes svůj název více než program more. Hlavní důvod byl především ten, že uměl ve výpisu textu scrollovat nejen směrem od začátku souboru ke konci, ale bylo možné se vrátit i na předchozí, již odscrollované stránky. Toto již delší dobu příkaz more samozřejmě umožňuje taky.

Oba příkazy fungují tak, že při načtení daného souboru vypíší na monitor právě jednu obrazovku (stránku chcete-li) a čekají na interakci od uživatele, až dá pokyn (klávesou SPACE - mezerníkem) pro přesun na další stránku. Takto si můžeme pohodlně přečíst jakkoliv dlouhý textový dokument, třeba nějaké howto. Pokud se chceme v textu vrátit o stránku zpět, tak jednoduše stiskneme klávesu "b" (jako back).

Pokud chceme v textu vyhledat nějaké klíčové slovo, tak stiskneme klávesu "/" a napíšeme dané slovo. Pro opětovné vyhledávání daného slova nám stačí stisknout klávesu "n" nebo klávesu "." (platí pouze pro příkaz more), která zopakuje poslední zadaný příkaz.

Program less má dole stavový řádek v němž vypisuje název právě otevřeného souboru, právě zobrazené řádky z celkového počtu a procentuální ukazatel udávající současnou polohu v daném souboru.

Program more vypisuje ve stavovém řádku pouze procentuální údaj o poloze v souboru. Daný řádek na kterém se nacházíme (řádek na konci výpisu - tedy ten úplně dole) vypíše po stisku klávesy "=".

Program more se sám automaticky ukončí při odscrollování textu až na konec souboru nebo jej můžeme ukončit klávesou "q", kterou ukončujeme i program less.

Dalším užitečným příkazem u obou programů je příkaz "v", který nám na daném řádku spustí editor vi (či jiný máme-li jej přenastaven v proměnné prostředí) a umožní tak daný soubor editovat.

Kouknete-li se do manuálových stránek obou příkazů, tak zjistíte, že příkaz less má podstatně více možností. Já jsem zvyklý na používání příkazu more, ale občas využiji i příkaz less, protože se podstatně lépe chová při výpisu textového souboru ve kterém jsou místy nějaká binární data a dokáže číst i binární soubory. Příkaz less tato binární data vypíše, zatímco more je nevypíše, pokud zjistí, že se jedná čistě o binární soubor a v případě textového souboru s částí binárních dat jej vypíše, samozřejmě v podobě rozsypaného čaje, což občas rozhodí i terminál (příkaz reset v daném terminálu vše spolehlivě napraví, POZOR - nemyslím tím reset celého počítače - ten nechme pro uživatele Windows :-) )

No a aby toho nebylo málo, tak existuje ještě příkaz most, který má obdobné i když trochu omezenější vlastnosti jako výše dva uvedené příkazy.

Dalším příkazem pro čtení textu je příkaz cat, který však vypíše kompletně celý text ze souboru a ukončí se. Tento příkaz čte daný text po řádcích a lze jej s výhodou použít i pro spojování souborů. Příkaz cat se také dá využít pro zápis textu do souboru nebo na připsání textu na konec již existujícího souboru.

cat > soubor.txt
plechovka
linux
brambora 
auto
tux
trolejbus
auto
brambory
CTRL-c
cat soubor1 soubor2 soubor3 > vysledny_soubor

Bratříčkem příkazu cat je příkaz tac, který funguje úplně stejně akorát s tím rozdílem, že daný soubor vypisuje po řádcích od jeho konce do počátku.

tac soubor.txt

brambory
auto
trolejbus
tux
auto
brambora 
linux
plechovka

Příkaz head vypisuje prvních n řádků ze začátku daného souboru. Defaultně, bez parametru vypíše prvních 10 řádků. Pokud chceme vypsat více řádků, například prvních 25 řádků, spustíme jej následovně

head - 25 /etc/services

nebo

head -c 25 /etc/services

pro vypsání prvních 25 znaků.

Příkaz tail je opět bratříčkem příkazu head s tím rozdílem, že provádí výpis posledních n řádků z daného souboru. U příkazu tail nemohu nezmínit jeho volbu -f, při níž příkaz stále vypisuje posledních n řádků, tzn. po přečtení n řádků ze souboru se neukončí a vypisuje dále nově příchozí data. Toto je velice užitečná volba pro čtení logů, kdy vidíme i nově příchozí záznamy, které jsou do logu zapsány při výskytu nějaké události.

tail -f /var/log/messages

Dalším příkazem, který již tolik nesouvisí s čtením textu, ale spíše s jeho zpracováním je příkaz sort a slouží k třídění textu. Samotné třídění se řídí pravidly danými nastavením proměnné prostředí LC_COLLATE, tzn. pokud vám tato pravidla třídění nevyhovují, můžete si je pomocí níže uvedeného příkazu změnit na cokoliv jiného.

export LC_COLLATE=POSIX
sort soubor.txt

auto
auto
brambora 
brambory
linux
plechovka
trolejbus
tux

Pokud chceme mít na výstupu zároveň i unikátní jména (tzn. žádná položka se nebude opakovat jako v našem případě položka "auto") tak použijeme volbu -u nebo můžeme použít příkaz uniq.

Níže uvedený příklad nám srovná výpis souborů a adresářů v adresáři /etc podle velikosti a to od největšího po nejmenší - je to analogie příkazu ls -lS.

ls -l /etc | sort +4nr

Na vysvětlenou: volba +4 říká příkazu sort, že má třídit podle čtvrtého sloupce, volba n říká, že třídění má být numerické (tedy podle čísel) a volba r je třídění reverzní - obrácené.

Příkaz pro vyhledání klíčových slov v textu se nazývá grep (lze také použít jemu podobné varianty jako například fgrep, egrep). Následující příklad vše objasní.

grep brambora soubor.txt

brambora

V praxi jej lze s výhodou využít kromě prohledávání souborů a hledání klíčových slov i například k výpisu platných (nezakomentovaných) voleb konfiguračních souborů, či při kontrole (md5sum) velkého počtu souborů, což ukazují následující příklady. Možností využití programu grep je samozřejmě nepřeberné množství.

grep -v \# /etc/inetd.conf
md5sum -c MD5SUM | grep -v OK

Kdo z vás si myslel, že tímto naše hrátky s textem skončí, tak se mýlil, teď přijde teprve to pravé ořechové - příkazy, které nejsou tolik známé, ale o to více se můžou hodit.

Příkazy konvertující tabulátory na daný počet mezer a naopak, jedná se o příkazy expand a unexpand.

Následující příkaz s názvem cut slouží k extrahování polí z daného souboru či výpisu a je to nepostradatelný pomocník při zpracování výstupů z programů. Jeho nejdůležitější volbou je volba -d (delimiter - oddělovací znak) a volba -f (field specifier - určení polí, která se mají vypisovat). Více bude patrné z názorných příkladů, v prvním příkladu se pomocí cut vypíší ze souboru /etc/mtab všechna připojená zařízení a adresář jejich připojení a v druhém příkladu se vypíší ze souboru /etc/passwd všichni uživatelé v systému a jejich UID.

cat /etc/mtab | cut -d ' ' -f1,2
cut -d: -f1,3 /etc/passwd

Další příkaz pro zpracování textu, příkaz paste umožňuje spojovat více souborů do jednoho a to tak, že spojuje soubory do sloupců.

Vytvořme si pro názornost následující dva soubory

cat > soubor.txt
plechovka
linux
brambora 
auto
tux
trolejbus
auto
brambory
CTRL-c
cat > soubor2.txt
rezava
bajecny
syrova
ojete
plysovy
cerveny
nove
shnile
CTRL-c

Výsledek našeho snažení za přispění příkazu paste bude následující

paste soubor2.txt soubor.txt

rezava  plechovka
bajecny linux
syrova  brambora 
ojete   auto
plysovy tux
cerveny trolejbus
nove    auto
shnile  brambory

Příbuzným výše uvedenému příkazu je příkaz join, který umí spojit dva soubory (na rozdíl od výše uvedeného, který dokáže spojovat nespočetné množství souborů do jednoho) a vytvořit tak jednoduchou verzi relační databáze (samozřejmě bráno s velkou nadsázkou). Jak to funguje - každý soubor obsahuje v prvním sloupci klíč (obvykle číselná hodnota) a podle tohoto klíče program join spáruje dané položky k sobě. Tyto dvousloupcové soubory můžeme vytvořit právě za pomoci příkazu paste.

data1.txt
---------
1 pivo
2 kofola
3 caj
4 mliko
data2.txt
---------
1 25Kc
2 15Kc
3 20Kc
4 10Kc
join data1.txt data2.txt

1 pivo 25Kc
2 kofola 15Kc
3 caj 20Kc
4 mliko 10Kc

Když už jsem nakousl číslování, tak samozřejmě nemůžu nezmínit program nl, který provádí číslování řádků daného souboru a je vhodný například pro číslování řádků zdrojového kódu.

Následující dva příkazy fold a fmt slouží k formátování textu na danou šířku. Zatímco příkaz fold nám daný text naformátuje na danou šířku, tzn. že případné slovo bez problémů uprostřed rozdělí, příkaz fmt zohledňuje daná slova a citlivě text rozděluje, takže je vhodný pro formátování textu na danou šířku - defaultně je nastaven na šířku 75 znaků na řádku.

Dalším z formátovacích příkazů je příkaz column, který slouží k formátování textu do úhledných sloupců.

(printf "PERMISSIONS LINKS OWNER GROUP SIZE MONTH DAY \ 
HH:MM NAME\n" ; ls -l /etc) | column -t

Příkaz, který naopak vyjímá sloupec dané šířky z výpisu či souboru se nazývá colrm.

ls -l /etc/ | colrm 1 10

Jedním z posledních příkazů, které si v tomto díle probereme je příkaz tr sloužící ke změně/záměně znaků. Nejčastější využití má v záměně všech znaků za malá či naopak za velká písmena nebo při převodu DOSových konců řádků na Linuxové (tedy vyjmutí znaků CR). Příkaz tr by se dal považovat za hodně odlehčenou variantu programu sed nebo awk, které také spadají do tohoto dílu, ale pro jejich náročnost se jim budeme věnovat až v některém z dalších dílů linuxových příkazů. U příkazu tr je důležité si dát pozor na to, že dané hranaté závorky je třeba správně uvozovat, aby je neexpandoval daný shell.

tr '[:lower:]' '[:upper:]' < soubor.txt
tr -d '\015' < soubor.txt

Pomocí příkazu tr se také dají hrát zajímavé šifrovací hry, kdy daná písmena zaměníme za jiná.

cat soubor.txt | tr "A-Z" "TOSHRKPNELUDCWFYIGJAMQBVZX"

AMV TA BFGU!

Všem je doufám jasné, co jsem napsal :-)

Posledním příkazem, který patří spíše do kategorie informativních je příkaz wc (ten si díky svému názvu jistě každý dobře zapamatuje). Slouží k výpisu počtu řádků, slov a písmen (znaků včetně mezer). V praxi se často využívá pro počítání, například

wc soubor.txt

      8       8      59 soubor.txt

nebo

ls /etc | wc -l

    169

což vypíše počet řádků, tedy souborů a adresářů v adresáři /etc.

Doufám, že vás tento poměrně těžkopádný výklad příkazů pro zpracování textu nějak neodradil od poznávání příkazové řádky a že jste si v něm nalezli pár příkazů, které vám budou ulehčovat vaši práci. Práce s textem v příkazové řádce je každopádně mnohem efektivnější než práce s textem v grafickém prostředí.

Zdroje

  • man less
  • man more
  • man most
  • man cat
  • man tac
  • man head
  • man tail
  • man sort
  • man tsort
  • man grep
  • man look
  • man expand
  • man unexpand
  • man cut
  • man paste
  • man join
  • man fold
  • man fmt
  • man col
  • man column
  • man colrm
  • man tr
  • man pr
  • man wc

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze