2013-04-11 24 views
7

Đối với công việc của tôi, tôi thường xuyên tìm kiếm các mẫu trong tệp. Nói chung, tôi sử dụng grep --color=auto để tô màu mẫu tìm kiếm. Bây giờ, khi tôi đang tìm kiếm nhiều mẫu, tất cả đều phải có mặt trong một dòng, tôi sử dụng grep pattern1 file|grep pattern2|grep pattern3 hoặc awk '/pattern1/&&/pattern2'. Nhưng bằng cách này, trong grep tôi mất màu mà rất hữu ích cho tôi, hoặc trong awk, tôi không biết bất kỳ cách nào để tô màu chỉ chuỗi mô hình. Khi nó trở nên quá phiền hà, tôi sử dụng grep pattern1 file|grep pattern2|grep pattern3|grep -E "pattern1|pattern2|pattern3".Sử dụng kết quả đầu ra màu cho tìm kiếm nhiều màu sắc, hoặc grep nhiều mẫu trong và điều kiện

Vì vậy, có cách nào trong grep đề cập đến nhiều mẫu và điều kiện không? (Tôi nghĩ cụm từ thông dụng nên hỗ trợ nó, nhưng không thể tìm thấy bất kỳ thứ gì, đặc biệt là thứ tự các mẫu không cố định)

Hoặc có cách nào để in màu các mẫu tìm kiếm không?

Bất kỳ phương pháp nhỏ gọn ngắn được chào đón (vì tôi sẽ được sử dụng nhiều lần một ngày)

+0

xem câu trả lời của tôi trên http://stackoverflow.com/a/6540890/297323 –

+0

@FredrikPihl Tôi đã tìm kiếm với awk đầu ra màu trước đó, tất cả chúng thực sự định dạng một trường, không phải là một mẫu. Vì vậy, tôi có thể làm cho các lĩnh vực thứ 2 trong màu xanh lá cây nếu tôi muốn, nhưng tôi không biết nếu mô hình của tôi sẽ đến trong lĩnh vực thứ hai hoặc lĩnh vực thứ 3. Những gì tôi muốn là mô hình đó nên đi vào màu xanh lá cây, không phân biệt nơi nó đang đến – abasu

Trả lời

6

Bạn có thể sử dụng --color=always khi đường ống từ grep để giữ màu:

grep pat1 --color=always | grep pat2 
+0

Cảm ơn @perreal, Nó đã lưu ngày :). Nhưng vẫn còn, tôi tò mò, Có cách nào trong grep để kết hợp các mẫu trong "và" điều kiện? Nếu "hoặc" có điều kiện, tại sao "và" không có mặt? Tôi không nói về đường ống đầu ra, nhưng một grep đơn, sẽ tìm kiếm các chuỗi chứa tất cả các mẫu được đưa ra, theo thứ tự bất kỳ – abasu

+1

cách để làm và là 1) đường ống, 2) sử dụng một cái gì đó như 'grep -e ' pat1. * pat2 '-e' pat2. * pat1 'đầu vào'. Có lẽ nó là mất tích vì nó là dư thừa (bạn không thể 'hoặc' với đường ống). – perreal

5

Bạn có thể xây dựng riêng shell script/function bạn sử dụng awk và thoát khỏi các mã:

Với file Awk color text sau đây sẽ in phù hợp từ Awk trong cyan:

$ awk '/Awk/{gsub(/Awk/,"\033[1;36m&\033[1;000m");print}' file 
Awk color test 

nguyên tắc này có thể dễ dàng được mở rộng cho nhiều mô hình bổ sung This line ends here xếp hàng một.

$ awk '/Awk/&&/This/{gsub(/Awk|This/,"\033[1;36m&\033[1;000m");print}' file 
Awk color test This line ends here. 

Kiểm tra here để biết thêm thông tin về màu vỏ.

+1

Cảm ơn @ sudo_O, tôi biết về gsub, nhưng không bao giờ nghĩ đến việc sử dụng nó theo cách này. Nó hoàn toàn trả lời câu hỏi thứ hai. – abasu

Các vấn đề liên quan