Tengo un conjunto de archivos que contienen notas escritas en orden inverso:
###### 27/07/2016-15:04:20 GMT+1:
Really? More?
###### 27/07/2016-15:04:18 GMT+1:
It happened again!
###### 27/07/2016-15:04:16 GMT+1:
A thing happened
Me gustaría que aparezcan en este orden:
###### 27/07/2016-15:04:16 GMT+1:
A thing happened
###### 27/07/2016-15:04:18 GMT+1:
It happened again!
###### 27/07/2016-15:04:20 GMT+1:
Really? More?
Algunos de estos archivos tienen un par de cientos de entradas: ¿cuál es la forma más fácil de hacer que esto suceda?
vim
emacs
regex
text-editors
Joe
fuente
fuente
Respuestas:
Solo tac
El comando
tac
puede hacerlo.Call tac by Vim
Si quieres ejecutarlo en Vim:
%
significa todas las líneas.!
corre comando externo .La barra invertida es necesaria para escapar del inicio
#
de sesión con el número"\#\#\#\#\#\#"
.Solo vim
Estos comandos reemplazan la nueva línea por tabulación. Si la pestaña está presente en el registro, use otro carácter en lugar de la pestaña.
fuente
Si hay una nueva línea final al final, el siguiente comando hace lo que desea en Vim:
La búsqueda de líneas que comienzan con
###
toma el rango de###
hasta la siguiente línea en blanco y la mueve a la parte superior.Si no hay una nueva línea final, probablemente abortará con
E16: invalid range
, por ejemplo , en ese caso, podría ajustar la expresión regular de esta manera:Sin embargo, a falta de la última línea, la primera entrada no tendrá una nueva línea después, por lo que, después de todo, podría ser más fácil agregar una sola línea vacía, agregar el final y usar el primer comando.
fuente
######
, algo así:g/^###/,/^###/-1m 0
? ¿Cuál es el propósito del punto.
en su código?:g/^###/;/\(\n###\|\%$\)/m0
trabajó para mi.