2012-06-19 28 views

Trả lời

5
sed -n '1024,2048{/error/{=;p}}' | paste - - 

Đây /error/ là một mô hình để khớp và = in số dòng.

+0

Tôi chấp nhận câu trả lời của bạn vì nó cũng in các số dòng gốc. Tôi không hoàn toàn hiểu được chút ít với {/ error/{=; p}} bạn có thể giải thích điều đó không? –

+0

/lỗi/là mẫu được khớp trong phạm vi số đã cho. –

+0

Wow! Bây giờ tôi đã học được một thủ thuật sed mới! Điều này là mạnh mẽ! – Viet

7

Sử dụng sed đầu tiên:

sed -ne '1024,2048p' | grep ...

-n nói không in dòng, 'x, y, p' nói dòng in xy bao gồm (ghi đè -n)

+0

Lý do tôi tin rằng giải pháp của Prince John Wesley tốt hơn là nó cũng in số dòng ban đầu, trong khi ở đây tôi sẽ có số của chúng trong phạm vi được chỉ định. Vẫn +1. –

3

Awk là một công cụ tốt cho công việc:

$ awk 'NR>=1024 && NR<=2048 && /error/ {print NR,$0}' file 

Trong awk biến NR chứa số dòng hiện tại và $0 chứa đường riêng của mình.

Lợi ích khi sử dụng awk là bạn có thể dễ dàng thay đổi đầu ra để hiển thị theo bất kỳ cách nào bạn muốn. Ví dụ: để tách số dòng khỏi dòng có dấu hai chấm theo sau là một TAB:

$ awk 'NR>=1024 && NR<=2048 && /error/ {print NR,$0}' OFS=':\t' file 
Các vấn đề liên quan