Come posso eliminare una linea se è più lunga di es: 2048 caratteri?
Come posso eliminare una linea se è più lunga di es: 2048 caratteri?
Risposte:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
Ecco una soluzione che elimina le righe che hanno 2049 o più caratteri:
sed -E '/.{2049}/d' <file.in >file.out
L'espressione /.{2049}/d
corrisponderà a qualsiasi riga che contiene almeno 2049 caratteri e li cancella dall'input, producendo solo una riga più corta sull'output.
Con awk
linee di stampa di lunghezza 2048 o inferiore:
awk 'length <= 2048' <file.in >file.out
Imitando la sed
soluzione letteralmente con awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
Qualcosa del genere dovrebbe funzionare in 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
non è necessario.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. length
è una scorciatoia per length($_)
comunque.
Le risposte di cui sopra non funzionano per me su Mac OS X 10.9.5.
Il seguente codice funziona:
sed '/.\{2048\}/d'
.
Sebbene non sia richiesto, ma fornito come riferimento, è possibile ottenere il seguente codice al contrario:
sed '/.\{2048\}/!d'
.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
Con gnu-sed, puoi usare il flag -r, per evitare di digitare le barre rovesciate e una virgola, per definire un intervallo aperto:
sed -r "/.{2049,}/d" input.txt > output.txt
con:
Per gli intervalli, per non corrispondere a schemi più grandi, avresti bisogno di ancore di linea come
sed -r "/^.{32,64}$/d" input.txt > output.txt