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}/dsẽ 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 sedgiả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
-lkhô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. lengthlà 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