स्वतंत्र रूप से कई कमांड के साथ पाइप को पार्स कैसे करें?


2

मैं प्रत्येक चरण पर अलग-अलग किए बिना कई आदेशों द्वारा एकल कमांड के आउटपुट को पार्स कैसे कर सकता हूं?

उदाहरण के लिए ls -al|grep -i somethingहर लाइन को पास करेंगे जो उसमें "कुछ" है जो अगले पाइप के लिए है जो ठीक है, लेकिन इसका मतलब यह भी है कि पाइप में हर दूसरी लाइन को छोड़ दिया गया है क्योंकि वहाँ स्थिति से मेल नहीं खाता है। मैं जो चाहता हूं वह स्वतंत्र रूप से कई कमांडों द्वारा एकल पाइप पर संचालित करने में सक्षम होना है।

इस मामले में यह मठ से एक पाइप है जो पूरे संदेश निकाय को पारित करता है। मैं grep प्राप्त करना चाहता हूँ, sed, हटाएं और इनमें से प्रत्येक को शायद चर को काटने के लिए असाइन करें।

प्रारंभ में मैं जो चाहता हूं, वह एक चर के लिए "संदेश आईडी", दूसरे चर के लिए "विषय" को असाइन करने में सक्षम हो सकता है, फिर उन लोगों को उचित कमांड तर्क में पास करें।

यहाँ है कि यह कैसे होगा

MessageBodyFromMutt|grep something -Ax -Bx |grep another thing from the original message| sed some stuff from the original message| cut from here to there

जाहिर है कि उपरोक्त लाइन वह नहीं करती जो मैं चाहता हूं।

मैं इन सभी आदेशों को मूल संदेश निकाय पर संचालित करना चाहता हूं। मुझे उम्मीद है कि यह समझ में आता है


कोशिश करो tee। यह आपके पाइप (हालांकि, चर के लिए नहीं) कांटे।
चोरोबा

चोरबा, धन्यवाद। ऐसा लगता है कि मुझे क्या चाहिए लेकिन मठ टी के बाद आदेशों के आसपास कोष्ठक को पसंद नहीं कर रहा है। मैंने कुछ जंजीरों का परीक्षण किया और वे बैश में काम करते हैं लेकिन म्यूट पाइप ऐसे मुद्दों के बारे में शिकायत कर रहा है। कोई सिफारिश?
यारुन

मठ शायद चल रहा है sh, नहीं bash। क्या आप इसे बैश चलाने के लिए कॉन्फ़िगर कर सकते हैं? या चला bash -c '...'
चोरोबा

@choroba ठीक है जो काम कर रहा है। मैं जो करने की कोशिश कर रहा हूं, यहां है। इसलिए मेरे पास एक कमांड है जिसे "टास्क ऐड + सेंडर ईमेलबॉडी + फ्रॉम" कहा जाता है। "+" टास्कवेयर में टैग हैं। क्या आपको ऐसा लगता है कि टी मुझे ऐसा करने दे सकता है? मैं सोच रहा था कि मैं उन्हें शेल वैरबल दे सकता हूं, लेकिन टी के साथ ऐसा नहीं लगता।
यारुन

अगर आप ओरिजिनल को ग्रिप करना चाहते हैं और ओरिजिनल को सीड करना चाहते हैं .. तो आप कैट ओरिजिनल जैसी कई लाइनें क्यों नहीं करते हैं | grep <ENTER> बिल्ली मूल | sed <ENTER> आदि यह स्पष्ट हो जाएगा यदि आपने उस डेटा का उदाहरण दिया है जिसे आप शुरू करते हैं और जिस डेटा को आप grep और sed के माध्यम से अंत में चाहते हैं।
बार्लोप

जवाबों:


2

आप आउटपुट को एक अस्थायी फ़ाइल में सहेज सकते हैं और व्यक्तिगत कमांड के इनपुट के रूप में उस फ़ाइल का उपयोग कर सकते हैं।
यदि कमांड में आउटपुट नहीं है, तो आप प्रक्रिया प्रतिस्थापन के teeसाथ उपयोग कर सकते हैं bash; ऐसा लगेगा

MessageBodyFromMutt | tee >( command1 ) >( command2 ) >( command3 )

लेकिन चूंकि आपके पास आउटपुट है, जो एक साथ मिलाया जाएगा, तो यह यहां मदद नहीं करता है - सिवाय इसके कि अगर आप आउटपुट को फाइलों में सहेजने के लिए कमांड बदलते हैं।

यदि आप एक अस्थायी फ़ाइल नहीं बना सकते हैं, तो आप उस आउटपुट को सहेज सकते हैं जिसे आप एक चर में कई बार संसाधित करना चाहते हैं, और फिर echoयह कई बार होता है:

messageBody="$( MessageBodyFromMutt )"
echo "$messageBody" | command1
echo "$messageBody" | command2
echo "$messageBody" | command3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.