Bir kürenin sırasını değiştirmek mümkün mü?


12

Aşağıdaki gibi bir şey yaparak syslog belirli bir iletinin tüm örneklerini kronolojik sırayla göstermeye çalışıyorum:

grep squiggle /var/log/messages*

Ne yazık ki glob paterni ilk olarak o anda aktif olan dosyayla eşleşiyor. Örneğin.

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

Bu, son mesajların önce kronolojik sırada geldiği anlamına gelir.

Glob patern davranışını messages, listenin sonunda boş eşleşmenin (yani sadece ) görünmesi için bir şekilde ayarlamak mümkün müdür ?

Değilse, bu sorunu çözmek için iyi bir yol ne olurdu?


2
Çıktıyı kullanarak tacşunları tersine çevirebilirsiniz : grep squiggle /var/log/messages* | tac...
pbm

Yanıtlar:


8

Globbing sırasını değiştirmenin bir yolunu bilmiyorum, ancak davanız için kolay bir çözüm var:

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

yani messagesglob kalıbınızdaki dosyalarla eşleşmeyin ve bunu grepargüman listesinin sonuna ekleyin .


Bunun için teşekkürler. Sorunu olması gerekenden daha karmaşık hale getiriyor!
Burhan Ali

1
Ya da ekstra fantezi ve daha az yedeklilik için kullanın grep squiggle /var/log/messages{-*,}. (Google'ı kullanmak istiyorsanız "bash brace genişleme" olarak adlandırılır.)
Wildcard

11

Zsh'de, bir glob niteleyicisi ile eşleşmelerin sırasını (diğer şeylerin yanı sıra) kontrol edebilirsiniz .

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)

(Daha fazla olasılık için kılavuza bakın.) Son sürümlerde oeveya ile bir karşılaştırma işlevi sağlayarak kendi sıralama düzeninizi bile tanımlayabilirsiniz o+.

Burada, dosyaların uygun sırası kronolojik sıradadır. Yine de, isme göre kolayca taklit edebilirsiniz ve bash'de bile çalışır:

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

Bu konuda daha çok okuduğumda zsh'dan giderek daha fazla etkileniyorum.
Burhan Ali

Dosyaları (sırayla) zsh'tan alıp bash'a geri gönderebilir miyim?
Wowfunhappy

@Wowfunhappy Evet, ancak özel karakterlere doğru davranmak için dikkatli olmalısınız. Yeni bir soru sorun.
Gilles 'SO- kötü olmayı bırak

2

Ls -tr (mod zamanına ve tersine göre sırala) ile birleştirilmiş backticks'i şu şekilde kullanabilirsiniz:

grep squiggle `ls -tr /var/log/messages*`
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.