Comandos Linux

Comando Bash Tac

Comando Bash Tac
Tac é um daqueles comandos que você não percebe até que já o fez, reinventou a roda, o que não é incomum na prática da programação, esteja você apenas aprendendo as cordas ou seja um profissional com anos de experiência em vanglorie-se, você é incrível. Se suas mãos estão limpas, então é bom para você; De qualquer forma, você terá uma surpresa, vou descarregar tudo o que sei sobre o comando tac e muito mais. Leia.

Também conhecido como cat reverso, tac um utilitário de linha de comando simples que permite inverter linhas na saída usando o | operador de tubo embutido e tac. Ou seja, se você tiver um comando, lado esquerdo (lhs), e quiser reverter o conteúdo de sua saída, tudo o que você faria é digitar lhs | tac. É isso!

É certo que há mais no tac do que aparenta. Não se preocupe. Cobriremos tudo em seu tempo.

Conselhos sobre tac

Usar ou não usar, essa é a questão. Você não vai querer tacar quando não precisa. No entanto, se você deseja espalhar o tac como seu comando básico, depende de você. Nesse ínterim, aqui está o meu conselho sobre o tac tomar ambos os lados para permanecer neutro.

Quando usar tac

Há momentos em que usar o tac que o ajuda a obter mais a linha de comando com menos código e tempo gasto pesquisando as opções de comando do lhs.

Quando você não tem certeza sobre as opções de lhs

Muitos comandos como sort vêm com uma opção para reverter a saída de um comando. No entanto, se você não tiver certeza se um comando do lado esquerdo tem ou não uma opção -r para reverter a saída, usar tac é uma maneira segura de reverter as linhas de saída.

Quando o desempenho não importa

Embora insignificante, a maioria dos comandos usados ​​em conjunto com uma opção integrada para reverter a saída tem um desempenho melhor do que canalizar a saída para tac. Então, se um pequeno atraso de desempenho não for um problema, canalizar para o tac para reproduzir a saída ao contrário está tudo bem.

Quando não usar tac

Há momentos em que você não pode usar tac porque você conhece melhor. Aqui estão alguns a serem observados.

Quando você conhece o comando no lhs tem uma opção para reverter as linhas de saída

Como eu disse, “A maioria dos comandos vem com uma opção para reverter a saída.”Se você sabe que um comando lhs específico tem uma opção, você não pode usar o tac. Afinal, -r é mais curto que - | tac.

Quando o desempenho é importante

Como eu disse, “Usar a opção reversa lhs pode ter um desempenho melhor do que tac.”Se você está procurando espremer alguns segundos em um script bash ou está lidando com arquivos maiores que requerem tempo para ler, você não pode usar o tac.

Ajuda tac

Executar o comando help para tac ou man tac mostra o uso junto com as opções que podem ser usadas. Aqui está o que esperar.

Comandos

tac --help

Resultado

Versão Tac

Qual versão eu sou?
Você é a última versão de si mesmo. No entanto, no caso de qual versão do seu tac, há uma opção para que.

Comandos

tac - versão

Resultado

Notas

Se você estiver usando tac no FreeBSD ou macOS, a opção longa para a versão pode não estar disponível. Nesse caso, tente -v ou man tac. Se você já tentou me avise. estou curioso. Obrigado

Opções tac

Além da ajuda e da versão, o tac não tem muitas opções. Pelo que tem, você com certeza descobrirá que tac não é qualquer velho gato reverso.

Opção antes tacada

A opção -b permite que você mude como o separador é anexado na saída. Por padrão, o separador de nova linha é anexado após cada linha.

Eu sei que é confuso. Vamos dividir por exemplo.

Primeiro, vamos ver como fica nossa saída antes de usar tac -b.

Comandos

seq 10

Resultado

Agora vamos ver em que nossa saída se transforma depois de usar tac sem -b.

Comandos

seq 10 | tac

Resultado

Agora vamos ver no que a saída se transforma usando tac -b.

Comandos

seq 10 | tac -b

Resultado

Opção de separador de tac

A opção do separador -s 'literal string' permite- lhe especificar o carácter ou sequência de caracteres usados ​​pelo tac para distinguir as linhas. Por padrão, o caractere de nova linha ('0a' em hexadecimal) é usado.

Como usar a opção do separador tac não é óbvio no início. No entanto, uma vez que você sabe que está lá, é difícil não tentar usá-lo.

Considere o seguinte exemplo, operando em linhas representadas em hexadecimal.

Comandos

seq 20 | xxd -ps | tac -s '0a' | xxd -ps -r

Resultado

Notas

(1) Pode parecer trivial como usar a seq 20 | comando tac, no entanto, nesse caso, não perdemos tempo trabalhando no fluxo de saída em hexadecimal. Usar este padrão é útil quando a separação não é algo trivial como o caractere de nova linha, como o byte zero.

Agora tente menos usar tac em algo um pouco menos bruto e mais meta como HTML simples.

Considere o seguinte arquivo.

Arquivo

UMA
B
C

Comandos

arquivo () echo -e "A
B
C
";
arquivo | tac -s "
"

Resultado

Conseguimos converter a página HTML

UMA
B
C

para dentro

C
B
UMA

usando tac.

Suponha que você precise fazer algo um pouco mais complicado, como tratar qualquer tag como um separador tac. Nesse caso, você não vai se dar bem usando apenas a opção do separador. É aí que entra a opção regex. Combinado com a opção de separador, permite que você faça mais com o comando tac do que inverter uma linha em um arquivo. Aqui está como.

Opção tac regex

A opção regex -r -s 'regex' permite que você especifique que a string separadora deve ser tratada como uma expressão regular.

Como usar a opção tac regex é tão simples quanto adicionar a opção -r antes ou depois do separador.

Considere o exemplo anterior usando a opção regex em conjunto com a opção separator. Vamos fazer o tac tratar qualquer tag de marcação como um separador.

Arquivo



funções simples


As funções são simples no bash. Pelo menos este é. Ele coloca uma corda na tela.


Comandos


função simples
()
eco
o mais simples possível função simples

Fonte: https: // temptemp3.github.funções io / bash

Comandos

Arquivo ()

eco '



funções simples

As funções são simples no bash. Pelo menos este é. Coloca um
corda na tela.

Comandos



função simples

(
)

eco o mais simples possível

função simples
'

arquivo | tac -r -s "] *."

Resultado

Conseguimos converter a página HTML revertendo o arquivo usando tags HTML. Se você olhar os detalhes, perceberá que ainda não é perfeito.

Comando Tac em puro bash

Aqui está uma versão primitiva do tac implement em bash puro que inverte as linhas canalizadas por um comando lhs. As versões futuras são deixadas como um exercício.

#!/ bin / bash
## tac
## versão 0.0.1 - inicial
###############################################################
tac ()
local -a arr
local -i i
mapfile arr -
i = "$ # arr [@]"
enquanto [$ i -ge 0]
Faz
echo $ arr [i]
deixe i- = 1
feito

###############################################################
tac
###############################################################

Fonte: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh

Comando Tac usando outros comandos

Aqui estão algumas versões primitivas do tac implementar usando outros comandos que invertem as linhas canalizadas por um comando lhs. As versões futuras são deixadas como um exercício.

Antes de começarmos, feche os olhos e pense: "O que poderia ser usado para implementar uma versão primitiva do tac?”
Muitos comandos vêm à mente, mas vou me concentrar naqueles para os quais temos espaço.

embasbacar

Semelhante ao comando Tac no exemplo do bash puro, para implementar tac, primeiro armazenaríamos as linhas lidas para serem reproduzidas ao contrário após todas as linhas serem lidas. Aqui está como ficaria usando o gawk.

 gawk 'linha [++ linha [0]] = $ (0) END para (i = 0; i

Agora tente usar no comando lhs seq 10.

 seq 10 | gawk 'linha [++ linha [0]] = $ (0) END para (i = 0; i

Como você esperaria, a saída é

Exercícios

1. A função lhs () seq 10; lista os inteiros de 1 a 10. Escreva um comando rhs de forma que lhs | rhs é igual a 10864213579 usando apenas tac (Dica: consulte Tac antes do exemplo de opção)
2. Reverte a saída de rhs () find -mindepth 1 -maxdepth 1 -print0; usando tac (Dica: veja o exemplo de opção do separador Tac)
3. Estender tac.sh (no comando Tac em bash puro) para se comportar exatamente como tac. Você precisará adicionar opções e testar seu comportamento.
4. Implementar uma versão primitiva do tac em bash puro como uma função recursiva.

TL; DR

Mais uma vez, gostei de escrever o comando Bash tac. Depois de ler, espero que você concorde que há mais coisas no tac do que você pensava. Além disso, depois de tentar fazer as coisas da maneira mais difícil perto do fundo, espero que você saiba como o comando tac pode ser útil. Se alguém conseguir fazer algum dos exercícios ou precisar de ajuda com o dever de casa, me avise. Obrigado,

Os 10 melhores jogos para jogar no Ubuntu
A plataforma Windows tem sido uma das plataformas dominantes para jogos devido à grande porcentagem de jogos que estão sendo desenvolvidos hoje para o...
5 melhores jogos de arcade para Linux
Hoje em dia, os computadores são máquinas sérias usadas para jogos. Se você não pode obter a nova pontuação máxima, você saberá o que quero dizer. Nes...
Batalha por Wesnoth 1.13.6 Desenvolvimento lançado
Batalha por Wesnoth 1.13.6 lançado no mês passado, é o sexto lançamento de desenvolvimento no 1.13.série x e oferece uma série de melhorias, principal...