reverter arquivo caractere por caractere usando tac

reverter arquivo caractere por caractere usando tac

Quero usar tacpara reverter um arquivo de texto caractere por caractere. Na página de informações do coreutils encontrei um exemplo dizendo: #Reverse um arquivo caractere por caracteretac -r -s 'x\|[^x]'

No entanto, a execução tac -r -sparece abrir a entrada padrão em vez de imprimir o arquivo. O que 'x\|[^x]'significa e o que devo fazer?

Também observei que a saída para tac [file]e tac -r [file]é a mesma e é igual a cat [file]. Ainda não consigo descobrir char por char reverso.

Responder1

Para reverter um arquivo caractere por caractere usando tac, use:

tac -r -s 'x\|[^x]'

Isto está documentado eminfo tac:

# Reverse a file character by character.
tac -r -s 'x\|[^x]'

-rfaz com que o separador seja tratado como uma expressão regular.-s SEPusa SEPcomo separador. x\|[^x]é uma expressão regular que corresponde a todos os caracteres (aqueles que são xe aqueles que não são x).

$ cat testfile
abc
def
ghi
$ tac -r -s 'x\|[^x]' testfile

ihg
fed
cba%
$

tac filenão é o mesmo que cat filea menos que filetenha apenas uma linha. tac -r fileé o mesmo tac fileporque o separador padrão é \n, que é o mesmo quando tratado como uma expressão regular e não.

Responder2

Se você não está preocupado com oPersonagem de baixa frequência(veja os comentários de mosvy), então é muito mais eficiente usar revdo que tac -r -s 'x\|[^x]'canalizá-lo, tacse necessário.

$ cat testfile
abc
def
ghi
$ rev testfile
cba
fed
ihg
$ rev testfile|tac
ihg
fed
cba

Esta solução é muito mais barata tac -r -s 'x\|[^x]'porque as expressões regulares tendem a desacelerar drasticamente as coisas.

informação relacionada