La pregunta más o menos lo dice todo. Soy consciente de que /^$/d
eliminará todas las líneas en blanco, pero no puedo ver cómo decir 'reemplazar dos o más líneas en blanco con una sola línea en blanco'
¿Algunas ideas?
La pregunta más o menos lo dice todo. Soy consciente de que /^$/d
eliminará todas las líneas en blanco, pero no puedo ver cómo decir 'reemplazar dos o más líneas en blanco con una sola línea en blanco'
¿Algunas ideas?
Respuestas:
Si no está disparando vim o sed para algún otro uso, cat realmente tiene una manera fácil de contraer varias líneas en blanco, solo use cat -s
.
Si ya estaba en vim y deseaba quedarse allí, podría hacer esto con la búsqueda interna y reemplazarlo emitiendo: :%s!\n\n\n\+!^M^M!g
(El ^ M es la representación visual de una nueva línea, puede ingresar presionando Ctrl+ vEnter), o guardar el tecleando simplemente por los bombardeos a cabo al gato: :%!cat -s
.
:%!cat -s
. ¡Aprende algo GNnew todos los días!
%s!\n\n\n\+!\r\r!g
Use \n
para indicar una nueva línea en el patrón de búsqueda. Use Ctrl+ Men el texto de reemplazo, o una referencia inversa. Ver :help pattern
y :help sub-replace-special
(vinculado desde :help :s
).
%s/\(\n\n\)\n\+/\1/
\n
no funciona en el texto de reemplazo.
Si en Vim, solo haz esto:
:%!cat -s
man
página.
Usando Perl:
perl -00 -pe ''
-00
la opción de línea de comando activa el modo slurp de párrafo, lo que significa que Perl lee el texto párrafo por párrafo en lugar de línea por línea.
Con sed (GNU sed) 4.2.2:
sed -r '
/^\s*$/ {
# blank line
:NEXT
N # append next line to pattern space - if none, autoprint PS and exit
s/^\s*$\n^\s*$//g;t NEXT # if 2 blank lines, clear PS and loop to NEXT
}
# else, autoprint PS and next/exit
' < $MYFILE
Sé que este es un código tonto, pero quería resolver este problema en menos de 10 minutos, y funcionó
for file in /directory/*
do
originalname=$file
us='_'
tempname=$file$us
echo $originalname
mv $originalname $tempname
uniq $tempname $originalname
rm $tempname
done
uniq
elimina líneas iguales adyacentes. Que no es lo que OP quiere.
-s
opción de cat: solo una nota histórica, no está en POSIX, pero parece estar disponible en BSD y GNU cat.