कृपया ध्यान दें कि tr -s ' '
विकल्प किसी एक अग्रणी स्थान को नहीं हटाएगा। यदि आपका कॉलम सही-संरेखित है (जैसा कि ps
pid के साथ है ) ...
$ ps h -o pid,user -C ssh,sshd | tr -s " "
1543 root
19645 root
19731 root
तब काटने से उन क्षेत्रों में से कुछ के लिए एक खाली लाइन हो जाएगी यदि यह पहला स्तंभ है:
$ <previous command> | cut -d ' ' -f1
19645
19731
जब तक आप इसे एक स्थान से पहले नहीं रखते हैं, जाहिर है
$ <command> | sed -e "s/.*/ &/" | tr -s " "
अब, पीआईडी नंबर (नाम नहीं) के इस विशेष मामले के लिए, एक फ़ंक्शन है जिसे कहा जाता है pgrep
:
$ pgrep ssh
शैल कार्य
हालांकि, सामान्य तौर पर यह अभी भी संक्षिप्त रूप में शेल फ़ंक्शन का उपयोग करना संभव है, क्योंकि read
कमांड के बारे में एक साफ बात है :
$ <command> | while read a b; do echo $a; done
पढ़ने के लिए पहला पैरामीटर, a
पहले कॉलम का चयन करता है, और यदि अधिक है, तो बाकी सब कुछ डाल दिया जाएगा b
। नतीजतन, आपको अपने कॉलम +1 की संख्या से अधिक चर की आवश्यकता नहीं है ।
इसलिए,
while read a b c d; do echo $c; done
फिर 3 कॉलम का उत्पादन करेगा। जैसा कि मेरी टिप्पणी में संकेत दिया गया है ...
एक पढे हुए रीड को ऐसे वातावरण में निष्पादित किया जाएगा जो कॉलिंग स्क्रिप्ट के लिए चर को पास नहीं करता है।
out=$(ps whatever | { read a b c d; echo $c; })
arr=($(ps whatever | { read a b c d; echo $c $b; }))
echo ${arr[1]}
द अर्रे सॉल्यूशन
तो फिर हम @frayser द्वारा उत्तर के साथ समाप्त होते हैं जो शेल चर IFS का उपयोग करना है जो एक स्थान पर चूक करता है, स्ट्रिंग को एक सरणी में विभाजित करने के लिए। हालांकि यह केवल बैश में काम करता है। डैश और ऐश इसका समर्थन नहीं करते हैं। मेरे पास एक व्यस्त बॉक्स में घटकों में एक स्ट्रिंग को विभाजित करने में वास्तव में कठिन समय है। यह एक एकल घटक (जैसे कि awk का उपयोग करके) प्राप्त करने के लिए पर्याप्त आसान है और फिर आपको हर पैरामीटर के लिए इसे दोहराने की आवश्यकता है। लेकिन फिर आप एक ही लाइन पर बार-बार awk को कॉल करते हैं, या बार-बार एक ही लाइन पर इको के साथ रीड ब्लॉक का उपयोग करते हैं। जो कुशल या सुंदर न हो। तो आप अंत में बंटवारे का उपयोग कर रहे हैं ${name%% *}
और इसी तरह। आपको कुछ पायथन कौशलों के लिए तरसता है क्योंकि वास्तव में शेल स्क्रिप्टिंग में बहुत मज़ा नहीं आता है, यदि आप जिन सुविधाओं के आदी हैं, उनमें से आधे या अधिक, चला गए हैं। लेकिन आप मान सकते हैं कि इस तरह के सिस्टम पर भी अजगर स्थापित नहीं किया जाएगा, और यह ;-) नहीं था।