Örneğin: 2048 karakterden uzunsa bir satırı nasıl silebilirim?
Örneğin: 2048 karakterden uzunsa bir satırı nasıl silebilirim?
Yanıtlar:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
İşte 2049 veya daha fazla karakter içeren satırları silen bir çözüm:
sed -E '/.{2049}/d' <file.in >file.out
İfade /.{2049}/d
, en az 2049 karakter içeren satırlarla eşleşir ve bunları girdiden siler, çıktıda yalnızca daha kısa çizgi oluşturur.
İle awk
, uzunluk 2048 veya daha kısa çizgiler baskı:
awk 'length <= 2048' <file.in >file.out
sed
Çözümü tam anlamıyla şununla taklit etmek awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
Bunun gibi bir şey Python'da çalışmalı.
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
de gerekli değil.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. Zaten length
bir kısayol length($_)
.
Yukarıdaki cevaplar benim için Mac OS X 10.9.5'de çalışmıyor.
Aşağıdaki kod çalışıyor:
sed '/.\{2048\}/d'
.
Sorulmamasına, ancak referans olması için sağlanmış olmasına rağmen, aşağıdaki kodu yerine getirebilirsiniz:
sed '/.\{2048\}/!d'
.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
Gnu-sed ile, ters eğik çizgileri yazmaktan kaçınmak için -r bayrağını ve açık aralığı tanımlamak için virgül kullanabilirsiniz:
sed -r "/.{2049,}/d" input.txt > output.txt
ile:
Aralıklar için, daha büyük kalıplarla eşleşmemek için aşağıdaki gibi
sed -r "/^.{32,64}$/d" input.txt > output.txt