Bagaimana saya bisa menghapus garis jika lebih panjang dari misalnya: 2048 karakter?
Bagaimana saya bisa menghapus garis jika lebih panjang dari misalnya: 2048 karakter?
Jawaban:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)(Mac OS X)
Inilah solusi yang menghapus garis yang memiliki 2049 karakter atau lebih:
sed -E '/.{2049}/d' <file.in >file.out
Ekspresi /.{2049}/dakan cocok dengan baris apa pun yang berisi setidaknya 2049 karakter dan menghapusnya dari input, hanya menghasilkan garis yang lebih pendek pada output.
Dengan awk, garis pencetakan panjang 2048 atau lebih pendek:
awk 'length <= 2048' <file.in >file.out
Meniru sedsolusi secara harfiah dengan awk:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)(Mac OS X)
Sesuatu seperti ini seharusnya bekerja dengan 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
-ldiperlukan, meskipun.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print. lengthbagaimanapun juga adalah jalan pintas length($_).
Jawaban di atas tidak berfungsi untuk saya di Mac OS X 10.9.5.
Kode berikut ini berfungsi:
sed '/.\{2048\}/d'.
Meskipun tidak diminta, tetapi disediakan untuk referensi, kebalikannya dapat dicapai kode berikut:
sed '/.\{2048\}/!d'.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)( Mac OS X, 10.10.4)
Dengan gnu-sed, Anda dapat menggunakan flag -r, untuk menghindari mengetik garis miring terbalik, dan koma, untuk menentukan interval terbuka:
sed -r "/.{2049,}/d" input.txt > output.txt
dengan:
Untuk interval, agar tidak cocok dengan pola yang lebih besar, Anda akan memerlukan jangkar garis seperti
sed -r "/^.{32,64}$/d" input.txt > output.txt