Як я можу видалити рядок, якщо він довший, наприклад: 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