आप जो करते हैं उसके आधार पर और पहले से नहीं जानते कि क्या है pip
उत्पादन होगा , आप grep
इसके अलावा कुछ के लिए फैसला कर सकते हैं /usr.*
।
यदि आप जानते हैं कि निर्देशिका के साथ शुरू होता है/usr
(और यह उत्पादन की रेखा के अंत में दिखाई देता है pip
, और यह कि /usr
निर्देशिका नाम से पहले लाइन पर कहीं भी प्रकट नहीं होता है), तो यह एक अच्छा विकल्प है;heemayl का जवाब आपको बताता है कि कैसे।
यदि आपको पता है कि इसका कारण यह /usr
है कि आप कमांड को केवल चलाते हैं और जिस निर्देशिका को आप बदलना चाहते हैं, उसे जानते हैं, तो मैं कमांड चलाने का सरल उपाय बताता हूं cd /usr/lib64/python2.7/site-packages
। यदि आप टैब पूर्णता का उपयोग नहीं करते हैं तो भी यह कम टाइपिंग है ।
अन्यथा, आप आउटपुट के पार्स होने के बारे में जो जानते हैं, उसके आधार पर आप एक अलग रीजेक्सप चुन सकते हैं। नीचे दिए गए सभी विकल्प अभी भी मान लेते हैं कि निर्देशिका नाम पंक्ति के अंत में दिखाई देता है, लेकिन अन्य धारणाएं बदलती हैं।
यदि आपको पता है कि निर्देशिका का नाम निरपेक्ष है (यानी, से शुरू होता है /
) और /
निर्देशिका नाम से पहले लाइन पर नहीं दिखाई देता है , तो आप उसी रीगेक्सप का उपयोग कर सकते हैं जैसे हेमायल के उत्तर में लेकिन /
इसके बजाय /usr
:
cd "$(pip install django | grep -o '/.*')"
यह किसी भी वर्ण के /
शून्य या अधिक ( *
) के बाद मेल खाता है (.
)।
यदि आप जानते हैं कि निर्देशिका नाम में कोई क्षैतिज व्हाट्सएप (कोई स्थान या टैब नहीं है) और पंक्ति के अंत में दिखाई देता है , तो आप निम्न कार्य कर सकते हैं:
cd "$(pip install django | grep -oP '[^\h]+$')"
यहाँ मैंने एक पर्ल रेगेक्सपी ( -P
) का उपयोग किया है क्योंकि \h
संक्षिप्त नाम (के लिए [:blank:]
) टाइप करने के लिए और एक बराबर विस्तारित रेगेक्सपी ( -E
) की तुलना में पढ़ना आसान बनाता है । यह +
वर्णों के वर्ग में किसी भी वर्ण के एक या अधिक ( ) से मेल खाता है ( [
]
) जो नहीं है ( ^
) एक स्थान या टैब ( \h
)।
अगर आपको पता है कि वह निर्देशिका नाम तुरंत in
क्षैतिज व्हाट्सएप से घिरा हुआ है (यानी, रिक्त स्थान पर बाईं और दाईं ओर दोनों को गद्देदार), और यह कि लाइन पर एकमात्र ऐसी घटना हैin
, तो आप इसका उपयोग कर सकते हैं:
cd "$(pip install django | grep -oP '\hin\h+\K.+')"
यह \K
एक या अधिक वर्ण ( .+
) जो एक स्थान या टैब ( \h
) के बाद दिखाई देते हैं in
, और एक और एक या एक से अधिक रिक्त स्थान या टैब ( \h+
), वास्तव में शामिल in
और रिक्त स्थान के बिना मेल करने के लिए शून्य-चौड़ाई पॉजिटिव लुक-पीछे अभिकथन ( ) का उपयोग करता है मैच में इसे घेर लें। लुक-अराउंड अस्लीमेंट्स पर्ल रेगुलर एक्सप्रेशंस की एक विशेषता है।
पैटर्न ने भी काम किया होगा, लेकिन हमें केवल एक खाली देखने की जरूरत है , चाहे कितने भी मौजूद हों। इसके विपरीत, हमें बाद में सभी ब्लैंक से मेल खाना चाहिए , या वे द्वारा त्याग नहीं किया जाएगा और उन्हें निर्देशिका नाम के भाग के रूप में मिलान किया जाएगा।\h+in\h+\K.+
in
in
\K
यदि आपको पता है कि निर्देशिका का नाम पंक्ति की अंतिम घटना के तुरंत in
बाद आता है , तो क्षैतिज व्हाट्सएप द्वारा उपयोग किया जा सकता है:
set +H
cd "$(pip install django | grep -oP '\hin\h+(?!.*\hin\h.*)\K.*')"
set -H
वहाँ, शून्य-चौड़ाई पॉजिटिव लुक-बैक ऐसर्ज़ेशन में स्वयं एक शून्य-चौड़ाई नकारात्मक लुक-फॉरवर्ड अभिकथन ( (?!
)
) शामिल है।
इस तरह से !
प्रकट होता है जैसे कि सुरुचिपूर्ण ढंग से बचना मुश्किल है ; जिस विधि का उपयोग मैंने इसे शेल इतिहास विस्तार को ट्रिगर करने से रोकने के लिए किया है, उसे कमांड को चलाने से पहले grep
अस्थायी रूप से इतिहास विस्तार ( set +H
) को अक्षम करने के लिए और set -H
बाद में इसे फिर से सक्षम करने के लिए किया जाता है । यदि आप इसका उपयोग किसी स्क्रिप्ट में कर रहे हैं और आपकी स्क्रिप्ट में यह शामिल नहीं है set -H
, तो आपको ऐसा करने की आवश्यकता नहीं है क्योंकि इतिहास विस्तार स्वचालित रूप से तभी सक्षम होता है जब कोई शेल इंटरेक्टिव रूप से चलता है।
अंत में, ध्यान दें कि इनमें से कोई भी, और न ही heemayl का जवाब है, वास्तव में के उत्पादन पाइप कर रहे हैं grep
करने के लिए cd
(हालांकि के उत्पादन में pip
अभी भी करने के लिए पहुंचाया जा रहा है grep
)। पाइपों के बजाय , इस काम के लिए उपयुक्त उपकरण कमांड प्रतिस्थापन है ।