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 91438×
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ě
nebo
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.
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 .
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 .
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
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
|
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ů
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
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ář
Více ...
Přidat zprávičku
Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|