
Quiero usar tac
para 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 -s
parece 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]'
-r
hace que el separador sea tratado como una expresión regular.-s SEP
utiliza SEP
como separador. x\|[^x]
es una expresión regular que coincide con todos los caracteres (los que lo son x
y los que no x
).
$ cat testfile
abc
def
ghi
$ tac -r -s 'x\|[^x]' testfile
ihg
fed
cba%
$
tac file
no es lo mismo que cat file
a menos que file
tenga una sola línea. tac -r file
es lo mismo tac file
porque 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 rev
en lugar de tac -r -s 'x\|[^x]'
canalizarlo tac
si 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.