tac příkaz je v podstatě cat příkaz, ale jeho účelem je zřetězení souborů obráceně. Jako kočka , má pohodlný záložní režim pro tisk na standardní výstup (STDOUT), pokud není poskytnut žádný výstupní soubor, což z něj činí jeden z těch příkazů, které se častěji používají jako líný pager – jako méně a další —než funkce, pro kterou je pojmenována.
Kočka příkaz je často nadměrně používán a zneužíván a tac je často brán jako vtipný příkaz jako ddate nebo cowsay . Často se objevuje v článcích z prvního dubna, které podrobně popisují hloupé triky s terminály. Takže může být překvapením, že tac ve skutečnosti má legitimní důvod existovat.
Je to vlastně užitečný příkaz.
Jaký je účel tac?
Tac manuálová stránka odvádí poměrně špatnou práci při popisu své vlastní funkce:
Write each FILE to standard output, last line first.
Berte toto prohlášení tak, jak je napsáno, tac by měl vytisknout poslední řádek souboru a poté vytisknout soubor počínaje řádkem jedna:
$ cat metasyntactic.list
foobar
foo
bar
baz
$ tac metasyntactic.list
baz
foobar
foo
bar
To však není to, co dělá. Jeho informační stránka je mnohem přehlednější:
copies each FILE (‘-’ means standard input),
or standard input if none are given,
to standard output, reversing the records
(lines by default) in each separately.
Například:
$ tac metasyntactic.list
baz
bar
foo
foobar
Ignorování skutečnosti, že tac vám dává vše obráceně, má několik překvapivě užitečných a jedinečných možností.
Tac a oddělovače
Jak ukazuje informační stránka, soubor nemusí být oddělen řádkem, což znamená, že tac je stejně efektivní jako například soubor CSV. Znak oddělovače souboru definujete pomocí --separator nebo -s spolu s oddělovačem použitým v souboru.
U souboru CSV je znakem pravděpodobně čárka (, ), ale můžete definovat libovolný znak. Pokud však soubor nekončí znakem oddělovače, dostanete neočekávaný výsledek:
$ tac --separator="," metasyntactic.csv
bazbar,foo,foobar
Mezi prvními dvěma položkami není žádný oddělovací znak. Za konečným záznamem souboru (řetězec následující za posledním oddělovačem, v tomto případě čárkou) nenásleduje čárka, takže jej tac nepovažuje za záznam. . Chcete-li tento problém vyřešit, použijte --before nebo -b volba, která umístí oddělovací znak před každý záznam:
$ tac --separator="," --before metasyntactic.csv
baz,bar,foo,foobar
Oddělovací znak nemusí být jeden znak. Může to být také regulární výraz (regulární výraz).
Tac a regulární výrazy
Úplné vysvětlení regulárního výrazu je mimo rozsah tohoto článku, ale stojí za zmínku, že rozšířený POSIX je podporován pomocí proměnné prostředí. Rozšířený regulární výraz výrazně zlepšuje čitelnost regulárního výrazu a v zájmu jednoduchosti to tento příklad používá. Předpokládejme, že máte soubor obsahující řetězce oddělené celými čísly:
$ cat metasyntactic.txt
foobar123foo456bar789baz898
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Můžete spolehlivě předpovědět, že řetězce, na kterých vám záleží, jsou odděleny celými čísly, ale nemůžete spolehlivě předpovědět, jaká tato celá čísla budou. To je přesně ten problém, který má regulární výraz vyřešit.
Chcete-li použít regulární výraz v tac použijte --regex nebo -r možnost před --separator definice. Pokud již není nastaveno ve vašem prostředí, musíte aktivovat REG_EXTENDED proměnná prostředí. Tuto proměnnou můžete nastavit na cokoli kromě nuly, abyste ji aktivovali, a můžete to udělat všemi obvyklými způsoby:
- Exportujte proměnnou pro relaci shellu, kterou používáte.
- Nastavte proměnnou prostředí v konfiguračním souboru shellu (např. ~/.bashrc ).
- Přidejte před proměnnou prostředí tac příkaz (v Bash, Zsh a podobně), jak je znázorněno v příkladu níže:
$ REG_EXTENDED=1 tac --regex \
--separator='[0-9]+' metasyntactic.txt
89baz898bar765foo432foobar1
Možnost regulárního výrazu však nezpracovává neukončené záznamy dobře, a to ani při použití --before volba. Pokud je pro vás tato funkce důležitá, možná budete muset upravit zdrojový soubor.
Kdy použít tac
Tyto jednoduché, ale užitečné možnosti analýzy umožňují tac stojí za to použít jako nekomplikovaný, minimalistický příkaz pro analýzu. Pro ty jednoduché úlohy, pro které se nevyplatí psát výraz AWK nebo Perl, tac prostě by to mohlo být rozumné řešení.
Tac příkaz je samozřejmě omezený, protože se záznamy žádným způsobem nemanipuluje, kromě toho, že je ruší. Ale někdy je to jediná manipulace se seznamem, kterou potřebujete.
Pokud například balíte software pro distribuci, není neobvyklé mít seznam závislostí, které jsou vyžadovány pro instalaci. V závislosti na tom, jak jste tento seznam shromáždili, jej můžete mít v pořadí, v jakém jste určili, že jsou vyžadovány závislosti, a nikoli v pořadí, ve kterém musí být nainstalovány.
Tato praxe je poměrně běžná, protože chyby kompilátoru narazí jako první na závislosti na vysoké úrovni. Tedy pokud ve vašem systému chybí libavcodec poté se GCC zastaví a upozorní vás; ale protože GCC nedostalo příležitost otestovat váš systém na libvorbis a libvpx , například vám nemůže říct, že tyto závislosti také chybí (a často musí existovat ve vašem systému před kompilací libavcodec ).
Takže váš seznam závislostí roste ve formě shora dolů, jak zjistíte, jaké knihovny váš systém potřebuje k sestavení knihoven, které knihovny potřebují (a tak dále). Na konci takového procesu tac je rychlý a snadný způsob, jak tento seznam zvrátit.
Další častou nepříjemností jsou log soubory. Záznamy se obvykle připojují k souboru protokolu, takže správci používají tail abyste viděli nejnovější chyby. To funguje dobře, ale jsou chvíle, kdy chcete vidět „kus“ záznamů, aniž byste věděli, jak daleko zpět musíte jít. Tac příkaz přesměrován na méně nebo více umístí nejnovější záznamy do horní části obrazovky.
Konečně, mnoho konfiguračních souborů nemá jasnou značku ukončení pro danou sekci. Můžete vyhledat awk a sed příkazy k navržení způsobu, jak určit, kdy končí blok v konfiguračním souboru, nebo můžete použít tac obrátit pořadí tak, že jakmile váš analyzátor najde první relevantní záznam v tomto bloku, bude také vědět, kdy přestat čtení, protože to, co bývalo záhlaví, je nyní zápatí.
Tac on
tac má spoustu dalších skvělých využití , a pravděpodobně mnoho důvodů, proč tac je příliš rudimentární na to, aby bylo řešením. Váš systém jej však pravděpodobně má nainstalovaný, takže si tento příkaz zapamatujte, až příště ve svém pracovním postupu narazíte na okrajové pouzdro, které opravdu potřebuje být vtac kdy obráceně.