क्या एक ग्लोब के क्रम को बदलना संभव है?


12

मैं कालानुक्रमिक क्रम से किसी विशेष संदेश के सभी उदाहरणों को निम्न प्रकार से करने की कोशिश कर रहा हूं:

grep squiggle /var/log/messages*

दुर्भाग्य से ग्लोब पैटर्न पहले सक्रिय फ़ाइल से मेल खाता है। जैसे।

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

इसका अर्थ है कि हाल के संदेश पहले कालानुक्रमिक क्रम में ऐतिहासिक संदेशों के बाद दिखाई देते हैं।

क्या खाली मैच बनाने के लिए ग्लोब पैटर्न के व्यवहार को किसी तरह समायोजित करना संभव है (यानी सिर्फ? messages) सूची के अंत में दिखाओ?

यदि नहीं, तो इस समस्या को दूर करने का एक अच्छा तरीका क्या होगा?


2
आप आउटपुट का उपयोग करके रिवर्स कर सकते हैं tac: grep squiggle /var/log/messages* | tac...
pbm

जवाबों:


8

मुझे ग्लोबिंग ऑर्डर को बदलने का एक तरीका नहीं पता है, लेकिन आपके मामले के लिए एक आसान समाधान है:

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

यानी messagesअपने ग्लोब पैटर्न में फ़ाइलों से मेल नहीं खाती , और इसे grepतर्क सूची के अंत में जोड़ें ।


उसके लिए धन्यवाद। होने की तुलना में समस्या को और अधिक जटिल बना दिया गया है!
बुरहान अली

1
या अतिरिक्त बेहोशी और कम अतिरेक के लिए, उपयोग करें grep squiggle /var/log/messages{-*,}। ("अगर आप इसे गूगल करना चाहते हैं तो" बश ब्रेस एक्सपोज़र ")
वाइल्डकार्ड

11

Zsh में, आप ग्लोब क्वालिफायर के साथ मैचों के क्रम (अन्य चीजों के बीच) को नियंत्रित कर सकते हैं ।

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)

(अधिक संभावनाओं के लिए मैनुअल देखें।) आप हाल के संस्करणों में, oeया के साथ एक तुलनात्मक फ़ंक्शन की आपूर्ति करके अपने स्वयं के क्रम को भी परिभाषित कर सकते हैं o+

यहाँ, फाइलों का उचित क्रम कालानुक्रमिक क्रम है। आप नाम के आधार पर इसे आसानी से अनुकरण कर सकते हैं, हालांकि, और यह भी काम करता है:

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

मैं तेजी से zsh से प्रभावित हूँ जितना मैंने इसके बारे में पढ़ा है।
बुरहान अली

क्या मैं zsh से फ़ाइलें (क्रम में) प्राप्त कर सकता हूं और उन्हें बैश करने के लिए वापस कर सकता हूं?
वाहफुन्हापी

@Wowfunhappy हां, लेकिन आपको विशेष पात्रों के साथ सही तरीके से व्यवहार करने के लिए सावधान रहने की आवश्यकता है। एक नया प्रश्न पूछें।
गिल्स एसओ- बुराई को रोकना '

2

आप इस तरह से ls -tr (मध्यम समय और रिवर्स में सॉर्ट) के साथ संयुक्त backticks का उपयोग कर सकते हैं:

grep squiggle `ls -tr /var/log/messages*`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.