Apakah mungkin mengubah urutan bola dunia?


12

Saya mencoba untuk menunjukkan semua contoh pesan tertentu dari syslog dalam urutan kronologis dengan melakukan sesuatu seperti berikut:

grep squiggle /var/log/messages*

Sayangnya pola glob cocok dengan file yang sedang aktif terlebih dahulu. misalnya.

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

Ini berarti bahwa pesan terbaru muncul pertama diikuti oleh pesan historis dalam urutan kronologis.

Apakah mungkin untuk menyesuaikan perilaku pola gumpal entah bagaimana untuk membuat kecocokan kosong (mis. Adil messages) muncul di akhir daftar?

Jika tidak, apa cara yang baik untuk mengatasi masalah ini?


2
Anda dapat membalikkan output menggunakan tac: grep squiggle /var/log/messages* | tac...
pbm

Jawaban:


8

Saya tidak tahu cara mengubah urutan globbing, tetapi ada solusi mudah untuk kasus Anda:

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

yaitu tidak mencocokkan messagesfile dalam pola glob Anda, dan menambahkannya ke akhir grepdaftar argumen.


Terima kasih untuk itu. Membuat masalah lebih kompleks dari yang seharusnya!
Burhan Ali

1
Atau untuk kesenangan ekstra dan mengurangi redundansi, gunakan grep squiggle /var/log/messages{-*,}. (Disebut "ekspansi bash brace" jika Anda ingin google itu.)
Wildcard

11

Di zsh, Anda dapat mengontrol urutan pertandingan (antara lain) dengan kualifikasi bola .

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)

(Lihat manual untuk kemungkinan lebih lanjut.) Anda bahkan dapat menentukan urutan penyortiran Anda sendiri dengan memasok fungsi perbandingan di versi terbaru, dengan oeatau o+.

Di sini, urutan file yang tepat adalah urutan kronologis. Anda dapat meniru dengan mudah berdasarkan nama, dan itu berfungsi bahkan dalam bash:

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

Saya semakin terkesan dengan zsh, semakin saya membacanya.
Burhan Ali

Bisakah saya mendapatkan file (secara berurutan) dari zsh dan meneruskannya ke bash?
Wowfunhappy

@Wowfunhappy Ya tetapi Anda harus berhati-hati untuk memperlakukan karakter khusus dengan benar. Ajukan pertanyaan baru.
Gilles 'SANGAT berhenti menjadi jahat'

2

Anda dapat menggunakan backticks yang dikombinasikan dengan ls -tr (urutkan berdasarkan waktu mod dan secara terbalik) seperti ini:

grep squiggle `ls -tr /var/log/messages*`
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.