revertir el archivo carácter por carácter usando tac

revertir el archivo carácter por carácter usando tac

Quiero usar tacpara invertir un archivo de texto carácter por carácter. En la página de información de coreutils encontré un ejemplo que decía: #Invertir un archivo carácter por caráctertac -r -s 'x\|[^x]'

Sin embargo, la ejecución tac -r -sparece abrir la entrada estándar en lugar de imprimir el archivo. ¿Qué 'x\|[^x]'significa y qué debería hacer?

También noté que el resultado de tac [file]y tac -r [file]es el mismo y son iguales que cat [file]. Todavía no puedo entender el carácter inverso de carácter por carácter.

Respuesta1

Para revertir un archivo carácter por carácter usando tac, use:

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

Esto está documentado eninfo tac:

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

-rhace que el separador sea tratado como una expresión regular.-s SEPutiliza SEPcomo separador. x\|[^x]es una expresión regular que coincide con todos los caracteres (los que lo son xy los que no x).

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

ihg
fed
cba%
$

tac fileno es lo mismo que cat filea menos que filetenga una sola línea. tac -r filees lo mismo tac fileporque el separador predeterminado es \n, que es lo mismo cuando se trata como una expresión regular y no.

Respuesta2

Si no estás preocupado por elpersonaje LF(consulte los comentarios de Mosvy), entonces es mucho más eficiente usarlo reven lugar de tac -r -s 'x\|[^x]'canalizarlo tacsi es necesario.

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

Esta solución es mucho más económica que tac -r -s 'x\|[^x]'porque las expresiones regulares tienden a ralentizar las cosas de manera espectacular.

información relacionada