sed '/^.\{2048\}./d' input.txt > output.txt
Como posso excluir uma linha se ela for maior que, por exemplo, 2048 caracteres?
Aqui está uma solução que exclui linhas com 2049 ou mais caracteres:
sed -E '/^.{2049}/d' <file.in >file.out
Estritamente falando, a âncora ^
não é necessária.
Com awk
, imprimindo linhas de comprimento 2048 ou menores:
awk 'length <= 2048' <file.in >file.out
Algo como isso deve funcionar em 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
As respostas acima não funcionam para mim no Mac OS X 10.9.5.
O código a seguir funciona:
sed '/.\{2048\}/d'
.
Embora não solicitado, mas fornecido como referência, o inverso pode ser obtido com o seguinte código:
sed '/.\{2048\}/!d'
.
Com o gnu-sed, você pode usar o sinalizador -r, para evitar digitar as barras invertidas, e uma vírgula, para definir um intervalo aberto:
sed -r "/.{2049,}/d" input.txt > output.txt
com:
Para os intervalos, para não corresponder a padrões maiores, você precisaria de âncoras de linha como
sed -r "/^.{32,64}$/d" input.txt > output.txt
Tags sed