Как я могу удалить строку, если она длиннее, например, 2048 символов?
Как я могу удалить строку, если она длиннее, например, 2048 символов?
Ответы:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
Вот решение, которое удаляет строки, содержащие 2049 или более символов:
sed -E '/.{2049}/d' <file.in >file.out
Выражение /.{2049}/d
будет соответствовать любой строке, которая содержит не менее 2049 символов, и удаляет их из входных данных, создавая только более короткую строку в выходных данных.
С awk
, печать строк длиной 2048 или короче:
awk 'length <= 2048' <file.in >file.out
Подражая sed
решению буквально с awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
Нечто подобное должно работать в 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
не нужно.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. length
в length($_)
любом случае это ярлык .
Приведенные выше ответы не работают для меня в Mac OS X 10.9.5.
Следующий код работает:
sed '/.\{2048\}/d'
,
Хотя и не просили, но предоставили для справки, обратное может быть достигнуто следующим кодом:
sed '/.\{2048\}/!d'
,
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
С gnu-sed вы можете использовать флаг -r, чтобы не вводить обратную косую черту, и запятую, чтобы определить открытый интервал:
sed -r "/.{2049,}/d" input.txt > output.txt
с:
Для интервалов, чтобы не соответствовать большим шаблонам, вам понадобятся линейные якоря, такие как
sed -r "/^.{32,64}$/d" input.txt > output.txt