Как я могу удалить строку, если она длиннее, например, 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