Wie kann ich eine Zeile löschen, die länger als zB 2048 Zeichen ist?
Wie kann ich eine Zeile löschen, die länger als zB 2048 Zeichen ist?
Antworten:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)(Mac OS X)
Hier ist eine Lösung, die Zeilen mit 2049 oder mehr Zeichen löscht:
sed -E '/.{2049}/d' <file.in >file.out
Der Ausdruck /.{2049}/dstimmt mit jeder Zeile überein, die mindestens 2049 Zeichen enthält, und löscht diese aus der Eingabe. Dadurch wird in der Ausgabe nur eine kürzere Zeile erzeugt.
Mit awkDruckzeilen der Länge 2048 oder kürzer:
awk 'length <= 2048' <file.in >file.out
Die sedLösung wörtlich nachahmen mit awk:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)(Mac OS X)
So etwas sollte in Python funktionieren.
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
-lwird aber nicht benötigt.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print. lengthist eine Abkürzung für length($_)sowieso.
Die obigen Antworten funktionieren unter Mac OS X 10.9.5 nicht.
Der folgende Code funktioniert:
sed '/.\{2048\}/d'.
Obwohl nicht gefragt, aber als Referenz zur Verfügung gestellt, kann die Umkehrung der folgenden Code erreicht werden:
sed '/.\{2048\}/!d'.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)( Mac OS X, 10.10.4)
Mit gnu-sed können Sie das Flag -r verwenden, um die Eingabe von Backslashes zu vermeiden, und ein Komma, um ein offenes Intervall zu definieren:
sed -r "/.{2049,}/d" input.txt > output.txt
mit:
Damit die Intervalle nicht mit größeren Mustern übereinstimmen, benötigen Sie Linienanker wie
sed -r "/^.{32,64}$/d" input.txt > output.txt