Átirányítás

A korábban említett cat parancs a megadott állomány tartalmát a szabványos kimenetre (a standard outputra) küldi; ez a mi esetünkben a képernyő (illetve alighanem a parancsértelmezőt futtató terminálablak).

A kimenet azonban átirányítható:

tux@madas:~/public_html/txt/mp$ cat ksh_hnk_1913 > temp
tux@madas:~/public_html/txt/mp$ ls -l ksh_hnk_1913 temp 
-rw-rw-r-- 1 tux tux 149995 okt   27 11:01 ksh_hnk_1913
-rw-rw-r-- 1 tux tux 149995 nov    1 16:56 temp
tux@madas:~/public_html/txt/mp$ 

Ahogyan láthatjuk, ezzel az eljárással bizonyos helyzetekben akár a cp parancsot is helyettesíthetnénk.

Más parancsok kimenetét is hasonlóképpen irányíthatjuk át. Lássuk most a head, majd a tail esetét: az előző segítségével hagyjuk el a helységnévtár utolsó két sorát, majd az utóbbival az első két sort:

tux@madas:~/public_html/txt/mp$ head -n -2 ksh_hnk_1913 > temp
tux@madas:~/public_html/txt/mp$ tail -n +3 temp > ksh_hnk_1913.txT
tux@madas:~/public_html/txt/mp$ rm temp 

(Ha valaki csodálkoznék a -2, illetve a +3 használatán, az idézze föl az előző lecke végén látott kérdéseket, illetve az azokra adható válaszok tanulságát…)

Ellenőrzésképpen nézzük meg, hány sorból áll az új állomány:

tux@madas:~/public_html/txt/mp$ wc ksh_hnk_1913.txT 
 12538  12548 149921 ksh_hnk_1913.txT

A wc parancs is megkaphatja paraméterként több állomány nevét:

tux@madas:~/public_html/txt/mp$ wc ksh_hnk_1913 ksh_hnk_1913.txT 
 12542  12552 149995 ksh_hnk_1913
 12538  12548 149921 ksh_hnk_1913.txT
 25080  25100 299916 összesen
tux@madas:~/public_html/txt/mp$ 

A figyelmes szemlélőnek föltűnhetett, hogy a psql kimenete minden sort egy szóközzel kezdett. Megelőlegezve most egy haladóknak szánt ismeretet, a sed parancs segítségével töröljük (kicseréljük) a sorkezdő szóközöket:

tux@madas:~/public_html/txt/mp$ sed "s/^ //" ksh_hnk_1913.txT > ksh_hnk_1913.txt
tux@madas:~/public_html/txt/mp$ wc ksh_hnk_1913.txT ksh_hnk_1913.txt
 12538  12548 149921 ksh_hnk_1913.txT
 12538  12548 137383 ksh_hnk_1913.txt
 25076  25096 287304 összesen
tux@madas:~/public_html/txt/mp$ 

Ha eddig nem rögzítettük volna, szögezzük le most: a unix/linux az állománynevekben (is) különbséget tesz a kisbetűk és a nagybetűk között.

Föltűnhetik, hogy a szavak száma tízzel több, mint a soroké – ezek szerint volt olyan település, amelynek a neve szóközt tartalmaz. Ezeket is kiválogathatjuk a sed parancs segítségével:

tux@madas:~/public_html/txt/mp$ sed -n "/ /p" ksh_hnk_1913.txt
selmecz- és bélabánya
nagyosztró és kisosztró
nagypalugya és gálfalu
okolicsnó és sztosháza
alsórásztok és felsőrásztok
tux@madas:~/public_html/txt/mp$ 

Erre a célra azonban elegendő az ugyancsak haladó szintűnek számító grep parancs:

tux@madas:~/public_html/txt/mp$ grep " " ksh_hnk_1913.txt
selmecz- és bélabánya
nagyosztró és kisosztró
nagypalugya és gálfalu
okolicsnó és sztosháza
alsórásztok és felsőrásztok
tux@madas:~/public_html/txt/mp$ 

Lássuk végül a sort parancsot:

tux@madas:~/public_html/txt/mp$ sort ksh_hnk_1913.txt
…
zsögöd
zsujta
zsúk
zsukó
zsunk
zsupánfalva
zsuppa
zsuppány
zsurk
tux@madas:~/public_html/txt/mp$ 

Vegyük észre, hogy a parancs helyesen rendezi a zs-vel kezdődő települések nevét: ezek követik Zuberecz, Zubogy, Zubrohlava, Zúgó, Zuhatag, Zuhogó, Zurány és Zutor települések nevét (nem mellesleg, ugyancsak helyesen, a rövid u és a hosszú ú a rendezés során egyenrangú).

A fejezet elején implicit módon kiderült, hogy az átirányításnak ezzel a módjával töröltük az állomány (most éppen a temp nevű állomány) korábbi tartalmát (feltéve persze, hogy létezett és volt tartalma).

Ha törlés helyett hozzáfűzni szeretnénk a kimeneti állományhoz, akkor > helyett >> használható:

tux@madas:~/public_html/txt/mp$ head ksh_hnk_1913.txt > temp
tux@madas:~/public_html/txt/mp$ wc temp
10 10 81 temp
tux@madas:~/public_html/txt/mp$ head ksh_hnk_1913.txt >>temp
tux@madas:~/public_html/txt/mp$ wc temp
 20  20 162 temp
tux@madas:~/public_html/txt/mp$ 

Miért kezdődik szóközzel a wc parancs kimenete a második esetben?