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?

Burhan Ali
sumber
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.

Tikar
sumber
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{-*,}
Gilles 'SANGAT berhenti menjadi jahat'
sumber
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*`
Sarel Botha
sumber