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}/d
akan 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 sed
solusi 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
-l
diperlukan, meskipun.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. length
bagaimanapun 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