Како користити Линук цат анд тац команде

Команде cat и tac су алати за преглед садржаја текстуалних фајлова, али њихова функционалност сеже много дубље од обичног приказивања текста. Задубимо се у њихове могућности и откријмо како ове наизглед једноставне команде могу бити веома корисне у радном окружењу Линук система.

Ове команде често се потцењују и сматрају превише једноставним да би биле од веће користи. Међутим, када се упознате са њиховим различитим начинима примене, схватићете да су итекако способне да обављају сложене задатке у вези са манипулацијом фајловима.

Команда cat

Команда cat првенствено се користи за приказ садржаја текстуалних фајлова, као и за спајање више фајлова у један.

У прошлости, у време dial-up модема, бинарни фајлови су се често делили на мање делове како би се олакшао пренос. Уместо да се преузима један велики фајл, корисници су преузимали сваки мањи део посебно. У случају да је преузимање једног дела било неуспешно, било је потребно поново преузети само тај део.

Наравно, касније је био потребан начин да се ови мањи делови поново споје у један употребљив бинарни фајл. Овај процес је био познат као спајање, и ту је команда cat одиграла своју улогу и добила име.

Са развојем широкопојасних и оптичких веза, ова потреба је изгубила на значају. Међутим, шта данас можемо учинити са командом cat? Испоставља се, много тога.

Приказ садржаја текстуалног фајла

Да бисте видели садржај текстуалног фајла у терминалу, користите следећу команду:

Важно је напоменути да фајл мора бити текстуални. Ако покушате приказати садржај бинарног фајла, резултат може бити непредвидљив, чак може доћи до закључавања терминала.

cat pesma1.txt

Садржај фајла pesma1.txt биће приказан у терминалу.

Ово је само један део познате песме. Где је остатак? Постоји и фајл pesma2.txt. Командом cat можемо приказати садржај више фајлова истовремено. Једноставно наводимо фајлове по реду у командној линији.

cat pesma1.txt pesma2.txt

Сада је боље, имамо целу песму.

Коришћење cat са less

Песма се пребрзо исписала, тако да нисмо успели прочитати прве стихове. Можемо проследити излаз команде cat команди less како бисмо могли читати текст сопственим темпом.

cat pesma1.txt pesma2.txt | less

Сада можемо прегледати цео текст, чак иако потиче из два различита фајла.

Нумерисање линија у фајлу

Команда cat може нумерисати линије у фајлу приликом приказа. Да бисмо то урадили, користимо опцију -n (број).

cat -n pesma1.txt

Све линије биће нумерисане.

Игнорисање празних линија при нумерисању

У претходном примеру, све линије, укључујући и празне, биле су нумерисане. Да бисмо нумерисали само линије текста и прескочили празне, користимо опцију -b (број-непразне).

cat -b pesma1.txt

Сада су само линије текста нумерисане, док су празне линије прескочене.

Приказ једне празне линије

Ако се у фајлу налази више узастопних празних линија, можемо наложити команди cat да прикаже само једну. Погледајмо следећи фајл.

Команда у наставку ће приказати само једну празну линију уместо низа празних линија. Користићемо опцију -s (сажми-празно).

cat -s pesma1.txt

Ово неће променити садржај фајла, већ само начин на који га cat приказује.

Приказ знакова за табулацију

Ако желите да сазнате да ли је празан простор узрокован размацима или табулаторима, то можете учинити помоћу опције -T (прикажи-табулаторе).

cat -T pesma1.txt

Табулатори су представљени знацима „^I“.

Приказ знакова краја линије

Можете проверити да ли има празних места на крају линије користећи опцију -E (прикажи-крајеве).

cat -E pesma1.txt

Крај сваке линије биће представљен знаком „$“.

Спајање фајлова

Нема смисла држати песму у два фајла, са по једном половином у сваком. Хајде да их спојимо у један нови фајл који ће садржавати целу песму.

cat pesma1.txt pesma2.txt > džabervok.txt

Користимо команду cat да проверимо садржај новог фајла:

cat džabervok.txt

Нови фајл садржи садржај оба претходна фајла.

Додавање текста у постојећи фајл

Ово је боље, али у ствари, не ради се о целој песми. Недостаје последњи стих. Последњи стих у „Џабервоку“ је исти као и први.

Ако имамо први стих у посебном фајлу, можемо га додати на крај фајла džabervok.txt и тако добити целу песму.

У овој следећој команди морамо користити >> уместо само >. Ако користимо >, преписаћемо садржај фајла džabervok.txt. То не желимо. Желимо додати текст на крај фајла.

cat prvi_stih.txt >> džabervok.txt

Проверимо садржај фајла džabervok.txt:

cat džabervok.txt

Коначно, сви делови песме су на окупу.

Преусмеравање улаза са тастатуре

Можете преусмерити унос са тастатуре у фајл користећи команду cat. Све што унесете биће преусмерено у фајл док не притиснете Ctrl+D. Имајте на уму да користимо један > јер желимо креирати фајл (или га заменити ако већ постоји).

cat > moja_pesma.txt

Можемо почети куцати чим издамо команду. Притиснули смо Ctrl+D кад смо завршили. Сада можемо проверити садржај фајла са:

cat moja_pesma.txt

Тај звук удаљене турбине вероватно је Луис Керол који се окреће у свом гробу великом брзином.

Команда tac

Команда tac је слична команди cat, али приказује садржај фајлова обрнутим редоследом.

Да видимо како то изгледа:

tac moja_pesma.txt

Фајл је приказан у терминалу обрнутим редоследом. У овом случају, то не утиче на његов књижевни квалитет.

Коришћење tac са стандардним улазом

Коришћење команде tac без имена фајла ће је усмерити да ради на улазу са тастатуре. Притиском на Ctrl+D се завршава фаза уноса, и tac ће приказати обрнутим редоследом све што сте унели.

tac

Када притиснете Ctrl+D, унос се обрће и приказује у терминалу.

Коришћење tac са фајловима евиденције

Осим за „трикове“ забављања, може ли команда tac бити корисна? Да, може. Многи фајлови евиденције додају нове записе на крај фајла. Користећи tac (и, супротно интуицији, head) можемо приказати последњи унос у терминалу.

Користимо tac да прикажемо фајл syslog у обрнутом смеру, а затим га прослеђујемо команди head. Говорећи команди head да штампа само прву линију коју прими (што је захваљујући tac последња линија у фајлу), видимо најновији унос у фајлу syslog.

tac /var/log/syslog | head -1

Команда head штампа најновији унос из фајла syslog и затим се завршава.

Имајте на уму да команда head штампа само једну линију, као што смо тражили, али је та линија толико дуга да се прелама у више линија у терминалу. Зато изгледа као да имамо три линије излаза.

Коришћење tac са текстуалним записима

Последњи трик који команда tac има у рукаву је посебан.

Обично, команда tac ради са текстуалним фајловима тако што их обрађује линију по линију, од дна према врху. Линија је низ знакова који се завршава знаком за нови ред. Међутим, можемо рећи команди tac да ради са другим разграничивачима. Ово нам омогућава да третирамо „комаде“ података у текстуалном фајлу као записе података.

Рецимо да имамо фајл евиденције неке апликације коју треба да прегледамо или анализирамо. Хајде да погледамо његов формат помоћу команде less.

less datoteka_evidencije.dat

Као што видимо, постоји образац који се понавља. Постоје низови од три линије хексадецималних вредности. Сваки скуп од три хексадецималне линије има линију ознаке која почиње са „=СЕК“, праћеном низом цифара.

Ако скролујемо до дна фајла, видимо да има много ових записа. Последњи је под бројем 865.

Претпоставимо да из неког разлога морамо да обрађујемо овај фајл обрнутим редоследом, запис по запис. Редослед три хексадецималне линије у сваком запису мора бити сачуван.

Приметимо да последње три линије у фајлу почињу хексадецималним вредностима 93, E7 и B8, тим редоследом.

Користимо tac да обрнемо фајл. Пошто је фајл веома дугачак, проследићемо га команди less.

tac datoteka_evidencije.dat | less

Ово обрће фајл, али није резултат који желимо. Желимо да се фајл обрне, али редови унутар сваког записа морају бити у оригиналном редоследу.

Раније смо забележили да последње три линије у фајлу почињу хексадецималним вредностима 93, E7 и B8, тим редоследом. Редослед тих линија је обрнут. Такође, линије „=СЕК“ су сада испод сваког скупа од три хексадецималне линије.

tac нам помаже у овоме.

tac -b -r -s ^=SEQ.+[0-9]+*$ datoteka_evidencije.dat | less

Хајде да ово разложимо.

Опција -s (сепаратор) обавештава tac шта желимо да користимо као разграничивач између записа. Говори tac-у да не користи обичан знак за нови ред, већ да уместо тога користи наш разграничивач.

Опција -r (регек) говори tac-у да третира стринг разграничивача као регуларни израз.

Опција -b (пре) изазива да tac прикаже разграничивач испред сваког записа, а не иза њега (што је уобичајени положај за подразумевани разграничивач, знак за нови ред).

-s (сепаратор) стринг ^=СЕК.+[0-9]+*$ се дешифрује на следећи начин:

Знак ^ представља почетак линије. Ово је праћено са =СЕК.+[0-9]+*$. Ово налаже команди tac да тражи свако појављивање знака „=СЕК“ на почетку линије, затим било који низ цифара (означен са [0-9]), а затим било који други низ знакова (означен са *$).

Све то прослеђујемо команди less, као и обично.

Наш фајл је сада приказан обрнутим редоследом са сваком линијом ознаке „=СЕК“ која је наведена испред три линије хексадецималних података. Три линије хексадецималних вредности су у свом оригиналном редоследу унутар сваког записа података.

Можемо једноставно проверити ово. Прва вредност прве три линије хексадецимала (које су биле последње три линије пре обртања фајла) одговара вредностима које смо раније забележили: 93, E7 и B8, тим редоследом.

Ово је прави трик за једну линију у терминалу.

Све има своју сврху

У свету Линукс-а, чак и наизглед најједноставније команде и алати могу имати изненађујућа и моћна својства.

Филозофија дизајна једноставних алата <a href=“https://en.wikipedia.org/wiki/Unix_philosophy#Do_One_Thing_and_Do_It_Well