Có thể thay đổi thứ tự của một quả địa cầu?


12

Tôi đang cố gắng hiển thị tất cả các phiên bản của một thông báo cụ thể từ syslog theo thứ tự thời gian bằng cách thực hiện một số thứ như sau:

grep squiggle /var/log/messages*

Thật không may, mẫu toàn cầu khớp với tệp hiện đang hoạt động trước tiên. ví dụ.

/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312

Điều này có nghĩa là các tin nhắn gần đây xuất hiện đầu tiên theo sau là các thông điệp lịch sử theo thứ tự thời gian.

Có thể điều chỉnh hành vi mô hình toàn cầu bằng cách nào đó để làm cho kết quả khớp trống (tức là chỉ messages) hiển thị ở cuối danh sách?

Nếu không, cách tốt để giải quyết vấn đề này là gì?


2
Bạn có thể đảo ngược đầu ra bằng cách sử dụng tac: grep squiggle /var/log/messages* | tac...
pbm

Câu trả lời:


8

Tôi không biết cách thay đổi thứ tự toàn cầu, nhưng có một cách giải quyết dễ dàng cho trường hợp của bạn:

grep squiggle /var/log/messages-* /var/log/messages

tức là không khớp các messagestệp trong mẫu toàn cầu của bạn và thêm nó vào cuối grepdanh sách đối số.


Cảm ơn vì điều đó. Đã làm cho vấn đề phức tạp hơn mức cần thiết!
Burhan Ali

1
Hoặc để thêm phần huyền ảo và ít dư thừa, hãy sử dụng grep squiggle /var/log/messages{-*,}. (Được gọi là "bash brace mở rộng" nếu bạn muốn google nó.)
Wildcard

11

Trong zsh, bạn có thể kiểm soát thứ tự các trận đấu (trong số những thứ khác) bằng vòng loại toàn cầu .

echo /var/log/messages*        # usual lexicographic order
echo /var/log/messages*(On)    # reverse lexicographic order
echo /var/log/messages*(om)    # reverse chronological order (ascending mtime)
echo /var/log/messages*(Om)    # chronological order order (descending mtime)

(Xem hướng dẫn để biết thêm khả năng.) Bạn thậm chí có thể xác định thứ tự sắp xếp của riêng mình bằng cách cung cấp chức năng so sánh trong các phiên bản gần đây, với oehoặc o+.

Ở đây, thứ tự thích hợp của các tập tin là thứ tự thời gian. Tuy nhiên, bạn có thể mô phỏng nó dễ dàng dựa trên tên và nó hoạt động ngay cả trong bash:

grep squiggle /var/log/messages{-*,}

Tôi ngày càng bị ấn tượng bởi zsh khi tôi càng đọc về nó.
Burhan Ali

Tôi có thể lấy các tệp (theo thứ tự) từ zsh và chuyển chúng trở lại bash không?
Wowfunhappy

@Wowfunhappy Có nhưng bạn cần cẩn thận để đối xử chính xác với các ký tự đặc biệt. Đặt một câu hỏi mới.
Gilles 'SO- ngừng trở nên xấu xa'

2

Bạn có thể sử dụng backticks kết hợp với ls -tr (sắp xếp theo thời gian mod và ngược lại) như thế này:

grep squiggle `ls -tr /var/log/messages*`
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.