न्यूलाइन-अलग एक्सरजेस


40

क्या विभाजक के रूप में केवल नईलाइन का xargsउपयोग करना संभव है ? (यदि यह मायने रखता है तो Linux और OS X पर बैश में)

मुझे पता है कि -0इसका इस्तेमाल किया जा सकता है, लेकिन यह PITA है क्योंकि हर कमांड NUL- सीमांकित आउटपुट का समर्थन नहीं करता है।


ऐसा क्या है जिसे आप पूरा करने की कोशिश कर रहे हैं। इसके बारे में जाने का एक और तरीका हो सकता है।
अगली सूचना तक रोक दिया गया।

@ डेनिस मैं इसे विभिन्न चीजों के लिए उपयोग करता हूं, अक्सर grep, sed, बहुत मूल awk आदि के साथ पाइपलाइन में, ज्यादातर निष्पादन को समानांतर बनाने के लिए। find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4जिस तरह से तुलना करने के लिए बहुत ज्यादा है ls *.foo | xargs -P4
कोर्नेल

टाइपिंग को कम करने के लिए लिपियों और कार्यों के दो उत्कृष्ट तरीके हैं।
अगली सूचना तक रोक दिया गया।

यह एक SO प्रश्न है, है ना?
चार्ल्स स्टीवर्ट

जवाबों:


17

की तर्ज पर कुछ

alias myxargs='perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command

कार्य करना चाहिए।


38
tr '\n' '\0'काम भी करता है।
कोर्नेल

2
पर्ल एक एकल चरित्र के लिए ओवरकिल है। trसीपीयू और अपनी उंगलियों के लिए दोनों तेजी से है।
हैलो वर्ल्ड

52

GNU xargs (लिनक्स पर डिफ़ॉल्ट, findutilsइसे प्राप्त करने के लिए OS X पर MacPorts से इंस्टॉल करें ) समर्थन करता है -dजो आपको इनपुट के लिए एक कस्टम सीमांकक निर्दिष्ट करने देता है , ताकि आप कर सकें

ls *foo | xargs -d '\n' -P4 foo 

मैं alias xxargs="xargs -d '\n'"अपने bashrc में हूं। तो मैं बस इस तरह की चीजें कर सकता हूं:grep -IRl foo | xxargs sed -i s/foo/bar/g
टायलर

4
यह वास्तव में स्वीकृत उत्तर होना चाहिए। पर्ल बाहर तोड़ने की जरूरत नहीं है। हालांकि trएक अच्छा विचार भी है।
एहतेश चौधरी

3
brew install findutilsऔर gxargsवास्तव में मुझे OS X पर जो चाहिए था, धन्यवाद।
ब्रैड कोच

5

बैश के साथ, मैं आमतौर पर कुछ भी कम से कम थोड़ा मुश्किल के लिए xargs से बचना पसंद करता हूं, जबकि पढ़े हुए छोरों के पक्ष में। आपके प्रश्न के लिए, while read -ar LINE; do ...; doneकाम करता है (लाइन के साथ सरणी सिंटैक्स का उपयोग करना याद रखें, जैसे, ${LINE[@]}पूरी लाइन के लिए)। इसके लिए किसी ट्रिकरी की आवश्यकता नहीं होती है: डिफ़ॉल्ट रूप से पढ़े \nजाने वाले लाइन टर्मिनेटर वर्ण के रूप में उपयोग करता है ।

मुझे एसओ पर एक सवाल पोस्ट करना चाहिए और xargs के पेशेवरों और विपक्ष के बारे में बनाम जबकि-छोरों को पढ़ा ... किया!


2
यह केवल अनुकरण कर सकता है xargs -n1 -d'\n', और संपूर्ण नहीं xargs
हैलो वर्ल्ड

@ हेलोवर्ल्ड - आप आसानी से पर्याप्त रूप से एक साथ बहस कर सकते हैं, इसलिए आप xargs -n$Nकेवल थोड़ी अतिरिक्त स्क्रिप्टिंग के साथ अनुकरण कर सकते हैं ।
चार्ल्स स्टीवर्ट

हां, मैं अपवित्रों में से हूं, यह सिर्फ एक टिप्पणी के लायक है।
हैलो वर्ल्ड

यह वही है जो मैं करता हूं! इसके अलावा, आप readविकल्पों का उपयोग कर सकते हैं , जैसे अलग-अलग चर में अधिक शब्दों को पढ़ना, या साथ सीमांकक बदलना IFS=' '
कैसरसोल

0

मानक संस्करण के साथ नहीं। मेरे पास एक हैक किया गया संस्करण है जो ऐसा करता है - मैंने ' find ... -print0 | xargs -0 ...' के बारे में जानने से पहले इसका उपयोग किया था । यदि आप एक प्रति चाहते हैं तो मुझसे संपर्क करें - मेरी प्रोफ़ाइल देखें। (कोई रॉकेट साइंस नहीं है - यह सिर्फ काम के बारे में है, हालांकि। यह पूरी तरह से प्रतिकृति प्रतिकृति नहीं है।)


0

इसके बारे में क्या cat file | xargs | sed 's/ /\n/ig'मानक लिनक्स बैश टूल का उपयोग करके रिक्त स्थान को नई लाइनों में बदल देगा।


यदि fileरिक्त स्थान और newlines शामिल हैं, तो इस आदेश का परिणाम उन दोनों के बीच अंतर करना असंभव बना देगा, जो इस सवाल के विपरीत दिशा में जा रहा है
मैक्स नानसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.