¿Cómo puedo eliminar una línea si es más larga que, por ejemplo, 2048 caracteres?
¿Cómo puedo eliminar una línea si es más larga que, por ejemplo, 2048 caracteres?
Respuestas:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
Aquí hay una solución que elimina líneas que tienen 2049 o más caracteres:
sed -E '/.{2049}/d' <file.in >file.out
La expresión /.{2049}/d
coincidirá con cualquier línea que contenga al menos 2049 caracteres y los elimine de la entrada, produciendo solo una línea más corta en la salida.
Con awk
líneas de impresión de longitud 2048 o menor:
awk 'length <= 2048' <file.in >file.out
Imitando la sed
solución literalmente con awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
Algo como esto debería funcionar en Python.
of = open("orig")
nf = open("new",'w')
for line in of:
if len(line) < 2048:
nf.write(line)
of.close()
nf.close()
perl -lne "length < 2048 && print" infile > outfile
-l
no es necesario, sin embargo.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. length
es un atajo de length($_)
todos modos.
Las respuestas anteriores no me funcionan en Mac OS X 10.9.5.
El siguiente código funciona:
sed '/.\{2048\}/d'
.
Aunque no se le solicite, pero se proporciona como referencia, lo contrario se puede lograr con el siguiente código:
sed '/.\{2048\}/!d'
.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
Con gnu-sed, puede usar la bandera -r para evitar escribir las barras diagonales inversas y una coma para definir un intervalo abierto:
sed -r "/.{2049,}/d" input.txt > output.txt
con:
Para los intervalos, para no coincidir con patrones más grandes, necesitaría anclas de línea como
sed -r "/^.{32,64}$/d" input.txt > output.txt