উত্তর:
একটি হল 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
pipeএবংcat
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
অন্যদিকে "সেড" ব্যবহার করে প্রথমে এটি প্রথম বন্ধনীর সমস্ত বিষয়বস্তু সম্পাদন করে এবং তারপরে এটি "সেড" এ দেয়, সুতরাং আদেশটি
(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"আইওডাব্লু: -n 1( xargsইনপুটটির echoপ্রতি লাইন একবারে কল করার প্রয়োজন নেই , যেহেতু -Iবোঝা যাচ্ছে -L1) এছাড়াও, সমস্ত পৃথক আর্গ উদ্ধৃতিটি অপ্রয়োজনীয় বলে মনে হয়।
আপনার পোস্ট করা কমান্ডটি "ইনপুট" স্ট্রিংটি COMMAND এর স্টিডিন স্ট্রিম হিসাবে গ্রহণ করবে, যা আপনি অনুসন্ধান করছেন এমন ফলাফল আনবে না যতক্ষণ না কমমান প্রথমে তার স্টিডিনের বিষয়বস্তু প্রিন্ট করে এবং তারপরে তার কমান্ড লাইন আর্গুমেন্টটি প্রিন্ট করে না।
দেখে মনে হচ্ছে আপনি যা করতে চান তা হ'ল কমান্ড প্রতিস্থাপনের আরও কাছাকাছি।
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
কমান্ড প্রতিস্থাপনের সাথে আপনার এই জাতীয় কমান্ডলাইন থাকতে পারে:
echo input `COMMAND "string"`
এটি প্রথমে ইনপুট হিসাবে "স্ট্রিং" দিয়ে কম্যান্ডের মূল্যায়ন করবে এবং তারপরে '`' অক্ষরের মধ্যে কী রয়েছে তা প্রতিস্থাপন করে সেই কমান্ডের মৃত্যুদণ্ডের ফলাফলকে একটি লাইনে প্রসারিত করবে।
echo input $(COMMAND "string")না পান তবে আপনি ব্যাকটিক্সের পরিবর্তে আধুনিক কমান্ডের বিকল্প ব্যবহার করবেন । সবার জন্য শুভ কামনা.
pbpaste | awk '{print "http://dx.doi.org/"$1}'এবং পানhttp://dx.doi.org/10.1098/rsif.2012.0125