Loại trừ các dòng dài từ kết quả grep


2

Làm cách nào để loại trừ các dòng rất dài khỏi grep các kết quả?

Tôi thường grep qua rất nhiều tệp .js ( -r ) và một số trong số chúng được biên dịch, vì vậy chúng bao gồm một dòng duy nhất thường dài vài nghìn ký tự. Từ tất cả sự lộn xộn đó, tôi thấy khó có thể nhìn thấy kết quả từ phần còn lại của các tập tin.

Tôi nên chuyển qua cái gì grep để loại trừ các dòng có độ dài hơn 1000 ký tự?

Tôi không muốn phải đưa kết quả qua một grep khác, vì điều đó sẽ khiến tôi mất màu từ đầu ra hoặc phải thêm grep đầu tiên ở cuối ống một lần nữa để lấy lại màu.


2
Bạn có thể đặt nó vào cut nhưng sau đó bạn vẫn mất màu: grep -r "foo"|cut -c 1000.
Andrew Lambert

1
Bạn có thể chuyển sang một công cụ tốt hơn :-) ack - grep trên steroid và sau đó sử dụng câu trả lời này stackoverflow.com/a/2034806/17413
Nifle

Câu trả lời:


3

Đường ống grep đến một cái gì đó sẽ không nhất thiết phải thoát khỏi màu sắc. Hành vi đó là kết quả của --color=auto (nếu bạn kiểm tra alias grep có lẽ là những gì bạn đang sử dụng). Bạn có thể ghi đè lên nó và vượt qua --color=alwaysgrep sẽ bảo tồn màu sắc ngay cả thông qua một đường ống.

Ngoài việc loại trừ các dòng, bạn có thể chuyển sang bất kỳ công cụ nào bạn thích (ví dụ: cut như ngạc nhiên đã đề cập). Hãy nhớ rằng, màu sắc từ grep sẽ chèn thêm byte vào các dòng khớp, nếu điều đó quan trọng với bạn. Không có cách rõ ràng nào (với tôi dù thế nào) làm điều đó trong cùng một grep cầu khẩn.


Vâng, tôi đã thiết lập --color=auto trong tôi .bashrc. Sử dụng --color=always với cut đã lừa
Attila O.

cut Lệnh không chỉ xuất các ký tự được chỉ định từ mỗi dòng, không bỏ qua các dòng đó? (tức là ký tự 1-1000)
ryanjdillon

1

Lệnh sau sẽ đạt được những gì bạn muốn, tức là không xuất các dòng khớp với độ dài lớn hơn 1000 ký tự:

grep -r --color=always $pattern . | cut -c1-1000

Các --color=always cờ đảm bảo rằng các chuỗi thoát màu sẽ được tạo bởi grep.

Giá trị mặc định của tùy chọn này là --color=auto, làm cho grep màu đầu ra của nó chỉ khi nó được chuyển đến một thiết bị đầu cuối tương tác và không sử dụng màu sắc khi nó được chuyển sang lệnh khác.

Nguồn: https://unix.stackexchange.com/a/113507/48906

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.