Làm thế nào để vẹt grep nghiêm trọng cho chiều dài dòng * không * trong một phạm vi nhất định?


17

LƯU Ý: Câu hỏi này là phần bổ sung của Câu hỏi và trả lời này: Làm thế nào để "grep" cho độ dài dòng trong một phạm vi nhất định?


Làm cách nào chúng ta có thể grep cho các dòng có ít hơn 8 hoặc nhiều hơn 63 ký tự, không có dòng nào có nhiều hơn tám và ít hơn 63 ký tự?

Vì vậy, một số lượng nhân vật chấp nhận được có thể là ...

7 6 5 4 3 2 1 0

... và ...

64 65 66 67 ...

3
Tôi biết bạn yêu cầu grep, nhưng bạn có thể cân nhắc awk, đặc biệt nếu bạn cần xử lý thêm, v.v (rất linh hoạt và dễ đọc ): awk '( length($0)<8 ) || ( length($0)>63 )' hành động #default của một điều kiện là in (các) dòng phù hợp với điều kiện. Hoặc, với ít xử lý hơn trên $ 0:awk '{ l=length($0) ; if (( l<8 ) || l>63 ) { print $0 ;} }'
Olivier Dulac

@mikeerv - vâng, khi nhìn vào điều này một lần nữa, có lẽ sẽ có ý nghĩa hơn khi tiến gần đến câu hỏi này với tư cách là người song công.
slm

@mikeerv - nói chung là một nỗi đau, tôi phải hợp nhất các câu trả lời vào một trong những câu hỏi và sau đó chúng bị xóa khỏi bản gốc. Đây là hướng dẫn để thực hiện: "Các câu hỏi nên được hợp nhất khi chúng giống nhau 99% và sẽ có ích khi có tất cả các câu trả lời từ nhiều câu hỏi trùng lặp ở một nơi. Điều này xóa câu trả lời, chuyển chúng đến câu hỏi mục tiêu và rời khỏi câu hỏi hiện tại còn sơ khai với một liên kết đến mục tiêu hợp nhất của nó. "
slm

Điều gì đã xảy ra với bình luận của tôi?
Dmitry Grigoryev

@DmitryGrigoryev - đoán ai đó không thích nó. lấy nó từ một người đã ở đó - quên nó đi.
mikeerv

Câu trả lời:


38
grep -xv '.\{8,63\}' <input >output

grepCông -xtắc của biểu thị toàn bộ khớp dòng - có nghĩa là bất kỳ mẫu nào khớp phải xác định một dòng từ đầu đến đuôi. đang làm...

grep -x pattern

... nói chung tương đương với ...

grep ^pattern$

grepCông -vtắc của phủ nhận ảnh hưởng của một mẫu đối với lựa chọn dòng. nói chung là ...

grep pattern

... sẽ chỉ chọn các dòng khớp với mẫu, nhưng với -vmẫu bị phủ định, chỉ những dòng không khớp được chọn.

...và vì thế...

grep -xv '.\{8,63\}'

... Khớp với tất cả các dòng bao gồm từ đầu đến đuôi ở bất cứ đâu trong khoảng từ 8 đến 63 ký tự và -vlựa chọn phủ định grepchỉ gây ra việc in mọi thứ khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.