जवाबों:
एक hacky सा है, लेकिन यह है कि तुम क्या सवाल (स्वीकार करने के लिए एक पाइप का उपयोग में पूछा करने के लिए सबसे छोटा रास्ता हो सकता है stdoutसे echo "input"के रूप में stdinकिसी अन्य प्रक्रिया / आदेश करने के लिए:
echo "input" | awk '{print $1"string"}'
आउटपुट:
inputstring
आप किस कार्य को पूरा करने की कोशिश कर रहे हैं? अधिक संदर्भ आपको बेहतर समाधान पर अधिक दिशा प्राप्त कर सकते हैं।
अपडेट - टिप्पणी का जवाब:
@NoamRoss
जो आप चाहते हैं उसे करने का अधिक मुहावरेदार तरीका है:
echo 'http://dx.doi.org/'"$(pbpaste)"
$(...)वाक्य रचना कहा जाता है आदेश प्रतिस्थापन । संक्षेप में, यह एक नई उप-धारा में संलग्न आदेशों को निष्पादित करता है, और इसके stdoutआउटपुट को प्रतिस्थापित करता है जहां $(...)मूल शेल में लागू किया गया था। तो आप प्राप्त करेंगे, प्रभाव में:
echo 'http://dx.doi.org/'"rsif.2012.0125"
'{print $0"string"}'पूरी चीज़ को हथियाने के लिए उपयोग करूँगा ।
stringमें हर पंक्ति में शामिल है। कोशिश करो echo 'input'\n'another line' | awk '{print $0"string"}'।
cat -स्टडिन से पढ़ने के लिए उपयोग करें, और इसे $()अनुगामी न्यूलाइन को दूर करने के लिए डालें
echo input | COMMAND "$(cat -)string"
हालाँकि आप पाइप को क्यों नहीं छोड़ते हैं और बाईं ओर के आउटपुट को कमांड प्रतिस्थापन में ले जाते हैं:
COMMAND "$(echo input)string"
मैं अक्सर पाइप का उपयोग कर रहा हूं, इसलिए यह उपसर्ग और प्रत्यय स्टडिन के लिए एक आसान तरीका है:
echo -n "my standard in" | cat <(echo -n "prefix... ") - <(echo " ...suffix")
prefix... my standard in ...suffix
pipecat
echo "my standard in" | echo -e "prefix\n$(cat -)\nsuffix":? या, अधिक पठनीय संस्करण:echo "my standard in" | printf "%s\n%s\n%s\n" "prefix" "$(cat -)" "suffix"
आप इसे सेड के साथ कर सकते हैं:
seq 5 | sed '$a\6'
seq 5 | sed '$ s/.*/\0 6/'
आपके उदाहरण में:
echo input | sed 's/.*/\0string/'
इसे पूरा करने के कुछ तरीके हैं, मुझे लगता है कि व्यक्तिगत रूप से सबसे अच्छा है:
echo input | while read line; do echo $line string; done
एक और "कमांड" (लाइन कैरेक्टर का अंत) को "कमांड" के साथ एक सेड कमांड में प्रतिस्थापित करके हो सकता है:
echo input | sed "s/$/ string/g"
मैं पूर्व को क्यों पसंद करता हूं? क्योंकि यह तुरंत स्ट्रिंग को एक स्ट्रिंग समेटता है, उदाहरण के लिए निम्न कमांड के साथ:
(echo input_one ;sleep 5; echo input_two ) | while read line; do echo $line string; done
आपको तुरंत पहला आउटपुट मिलता है:
input_one string
और फिर 5 सेकंड के बाद आपको दूसरी प्रतिध्वनि मिलती है:
input_two string
दूसरी ओर "sed" का उपयोग करते हुए पहले यह कोष्ठक की सभी सामग्री को प्रदर्शित करता है और फिर इसे "sed" को देता है, इसलिए कमांड
(echo input_one ;sleep 5; echo input_two ) | sed "s/$/ string/g"
दोनों लाइनों का उत्पादन करेगा
input_one string
input_two string
5 सेकंड के बाद।
यह उन मामलों में बहुत उपयोगी हो सकता है, जब आप फ़ंक्शन को कॉल कर रहे हैं जो पूरा होने में लंबा समय लेता है और फ़ंक्शन के आउटपुट के बारे में लगातार अपडेट रहना चाहता है।
मुझे पता है कि यह कुछ साल देर से है, लेकिन आप इसे xargs -J विकल्प के साथ पूरा कर सकते हैं:
echo "input" | xargs -J "%" echo "%" "string"
और के बाद से यह है xargs, तो आप इस फ़ाइल की एकाधिक पंक्तियों में एक ही बार में कर सकते हैं। यदि फ़ाइल के नाम में तीन लाइनें हैं, जैसे:
Adam
Bob
Charlie
तुम यह कर सकते थे:
cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice"
-Jकि मानक / आम नहीं लगता। लिनक्स पर (जहां xargsका हिस्सा है GNU findutils) मुझे त्रुटि मिलती है: यह xargs: invalid option -- 'J'किस सिस्टम पर है?
-Jमैक संस्करण के लिए है। लिनक्स के -Iलिए एक ही कार्य करता है।
cat names | xargs -I% echo "I like % because he is nice"IOW: -n 1( किसी भी समय इनपुट की प्रति पंक्ति एक बार xargsकॉल करने की आवश्यकता नहीं echoहै, -Iइसका तात्पर्य है -L1), इसके अलावा, सभी अलग-अलग arg उद्धृत, निरर्थक लगते हैं।
आपके द्वारा पोस्ट की गई कमांड स्ट्रिंग "इनपुट" लेगी, इसका उपयोग COMMAND की स्टडिन स्ट्रीम के रूप में करेंगे, जो आपके द्वारा खोजे जा रहे परिणामों का उत्पादन नहीं करेगा, जब तक COMMAND ने पहले अपने स्टड की सामग्री को प्रिंट नहीं किया और फिर अपनी कमांड लाइन की दलीलें छापीं।
ऐसा लगता है कि आप जो करना चाहते हैं वह कमांड प्रतिस्थापन के अधिक करीब है।
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
कमांड प्रतिस्थापन के साथ आप इस तरह एक कमांडलाइन हो सकते हैं:
echo input `COMMAND "string"`
यह पहले इनपुट के रूप में "स्ट्रिंग" के साथ COMMAND का मूल्यांकन करेगा, और फिर '' 'वर्णों के बीच की जगह पर एक पंक्ति में उस आदेश के निष्पादन के परिणामों का विस्तार करेगा।
echo input $(COMMAND "string")बैकटिक्स के बजाय आधुनिक कमांड प्रतिस्थापन का उपयोग करेंगे । सभी को सफलता मिले।
बिल्ली मेरी पसंद होगी: ls | cat - <(echo new line)
pbpaste | awk '{print "http://dx.doi.org/"$1}'और प्राप्त करता हूंhttp://dx.doi.org/10.1098/rsif.2012.0125