Làm thế nào tôi có thể xóa một dòng nếu nó dài hơn ví dụ: 2048 ký tự?
Làm thế nào tôi có thể xóa một dòng nếu nó dài hơn ví dụ: 2048 ký tự?
Câu trả lời:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
Đây là một giải pháp xóa các dòng có 2049 ký tự trở lên:
sed -E '/.{2049}/d' <file.in >file.out
Biểu thức /.{2049}/d
sẽ khớp với bất kỳ dòng nào chứa ít nhất 2049 ký tự và xóa chúng khỏi đầu vào, chỉ tạo ra dòng ngắn hơn trên đầu ra.
Với awk
, dòng in có độ dài 2048 hoặc ngắn hơn:
awk 'length <= 2048' <file.in >file.out
Bắt chước sed
giải pháp theo nghĩa đen với awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
Một cái gì đó như thế này sẽ hoạt động trong 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
không cần thiết.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. length
là một phím tắt cho length($_)
dù sao.
Các câu trả lời trên không hoạt động với tôi trên Mac OS X 10.9.5.
Đoạn mã sau không hoạt động:
sed '/.\{2048\}/d'
.
Mặc dù không được hỏi, nhưng được cung cấp để tham khảo, điều ngược lại có thể đạt được mã sau đây:
sed '/.\{2048\}/!d'
.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
Với gnu-sed, bạn có thể sử dụng cờ -r, để tránh nhập dấu gạch chéo ngược và dấu phẩy để xác định khoảng thời gian mở:
sed -r "/.{2049,}/d" input.txt > output.txt
với:
Trong các khoảng thời gian, để không khớp với các mẫu lớn hơn, bạn sẽ cần các neo dòng như
sed -r "/^.{32,64}$/d" input.txt > output.txt