Jak mogę usunąć wiersz, jeśli jest on dłuższy niż np .: 2048 znaków?
Jak mogę usunąć wiersz, jeśli jest on dłuższy niż np .: 2048 znaków?
Odpowiedzi:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
Oto rozwiązanie, które usuwa wiersze zawierające 2049 lub więcej znaków:
sed -E '/.{2049}/d' <file.in >file.out
Wyrażenie /.{2049}/d
będzie pasować do dowolnego wiersza zawierającego co najmniej 2049 znaków i usuwa je z wejścia, tworząc tylko krótszy wiersz na wyjściu.
Z awk
drukowaniem linii o długości 2048 lub krótszej:
awk 'length <= 2048' <file.in >file.out
Naśladując sed
rozwiązanie dosłownie za pomocą awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
Coś takiego powinno działać w Pythonie.
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
jest to jednak potrzebne.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. length
w length($_)
każdym razie jest skrótem .
Powyższe odpowiedzi nie działają w systemie Mac OS X 10.9.5.
Działa następujący kod:
sed '/.\{2048\}/d'
.
Chociaż nie pytano, ale podano w celach informacyjnych, można uzyskać następujący kod:
sed '/.\{2048\}/!d'
.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
W przypadku gnu-sed możesz użyć flagi -r, aby uniknąć wpisywania odwrotnych ukośników i przecinka, aby zdefiniować otwarty interwał:
sed -r "/.{2049,}/d" input.txt > output.txt
z:
Aby interwały nie pasowały do większych wzorów, potrzebne byłyby kotwice linii, takie jak
sed -r "/^.{32,64}$/d" input.txt > output.txt