উত্তর:
জিএনইউ সহ sed:
sed 's/./\&&/2g'
( sUbstitute যে ( g) অক্ষর ( .) একই (সঙ্গে &) সঙ্গে পূর্বে &( \&) কিন্তু শুধুমাত্র দ্বিতীয় সংঘটন থেকে শুরু ( 2))।
Portably:
sed 's/./\&&/g;s/&//'
(প্রতিটি ঘটনা প্রতিস্থাপন করুন, তবে তারপরে প্রথমটি মুছে ফেলুন &যা আমরা চাই না)।
কিছু awkবাস্তবায়ন সহ (কোনও শূন্য এফএসের জন্য আচরণটি অনির্দিষ্ট হিসাবে POSIX নয়):
awk -F '' -v OFS="&" '{$1=$1;print}'
(সঙ্গে gawkকয়েক অন্যান্য এবং awkবাস্তবায়নের, একটি খালি ক্ষেত্র বিভাজক তার চরিত্র সংগঠকদের মধ্যে রেকর্ড splits । আউটপুট ক্ষেত্র বিভাজক ( OFS) সেট করা হয় &। আমরা একটি মান নির্ধারণ $1(নিজেই) রেকর্ড জোর নতুন ক্ষেত্র বিভাজক সঙ্গে দ্বিজ করা এটি মুদ্রণের আগেও NF=NFকাজ করে এবং অনেকগুলি অবাস্তব বাস্তবায়নে কিছুটা দক্ষ তবে আপনি যখন আচরণটি করেন তখন পসিক্স দ্বারা অনির্ধারিত)
perl:
perl -F -lape '$_=join"&",@F'
( -peযে লাইন কোড চালায়, এবং ফলাফল ছাপে ( $_); -lরেখাচিত্রমালা এবং লাইন শেষা w শ স্বয়ংক্রিয়ভাবে পুনরায় যোগ করা; -aমান @Fমধ্যে বিভেদক সেটে ইনপুট বিভক্ত সঙ্গে -F।, যা এখানে একটি খালি স্ট্রিং ফলাফলের প্রতিটি ভাষার প্রতিটি অক্ষরের বিভক্ত হয় @F, তারপরে তাদের 'এবং' দিয়ে যোগ দিন এবং লাইনটি মুদ্রণ করুন))
বিকল্পভাবে:
perl -pe 's/(?<=.)./&$&/g'
(প্রদত্ত প্রতিটি অক্ষর প্রতিস্থাপন করুন এটির আগে অন্য চরিত্রটি রয়েছে (লুক-রেগএক্সএক্স অপারেটরটি (? <= ...))
zshশেল অপারেটর ব্যবহার :
in=12345
out=${(j:&:)${(s::)in}}
(আবার, s::প্যারামিটার সম্প্রসারণ পতাকা ব্যবহার করে একটি খালি ক্ষেত্র বিভাজককে বিভক্ত করুন এবং এর সাথে যোগ দিন &)
বা:
out=${in///&} out=${out#?}
(কোনও কিছুর প্রতিটি উপস্থিতি (তাই প্রতিটি চরিত্রের আগে) কেএসএস অপারেটর &ব্যবহার করে প্রতিস্থাপন করুন ${var//pattern/replacement}(যদিও kshখালি প্যাটার্নের অর্থ অন্য কিছু, এবং এখনও অন্য কিছু, আমি কী তা নিশ্চিত নই bash)) এবং পসিক্স ${var#pattern}স্ট্রিপিং দিয়ে প্রথমটি সরিয়ে ফেলুন অপারেটর).
ksh93শেল অপারেটর ব্যবহার :
in=12345
out=${in//~(P:.(?=.))/\0&}
( ~(P:perl-like-RE)পার্ল-এর মতো নিয়মিত এক্সপ্রেশন ব্যবহার করার জন্য একটি ksh93 গ্লোব অপারেটর (পার্ল বা পিসিআরই এর তুলনায় আলাদা), (?=.)চেহারা-সামনের অপারেটর হ'ল: এমন একটি চরিত্র প্রতিস্থাপন করুন যা তার নিজের সাথে অন্য একটি চরিত্র অনুসরণ করে \0) ( ) এবং &)
বা:
out=${in//?/&\0}; out=${out#?}
(প্রতিটি অক্ষর ( ?) এর সাথে &এবং নিজেই ( \0) প্রতিস্থাপন করুন এবং আমরা অতিশয় একটি মুছে ফেলি)
bashশেল অপারেটর ব্যবহার :
shopt -s extglob
in=12345
out=${in//@()/&}; out=${out#?}
(হিসাবে একই zsh, 'গুলি আপনার যা দরকার তা ব্যতীত @()সেখানে (ক ksh উল্লিখিত glob অপারেটর, যার জন্য আপনার যা দরকার extglobমধ্যে bash))।
awk -F '' -v OFS="&" 'NF=NF'
ইউনিক্স ইউটিলিটিস:
fold -w1|paste -sd\& -
ব্যাখ্যা:
"fold -w1" - প্রতিটি ইনপুট অক্ষরকে তার নিজস্ব লাইনে আবদ্ধ করবে
ভাঁজ - নির্দিষ্ট প্রস্থে ফিট করতে প্রতিটি ইনপুট লাইন মোড়ানো
-w, --width = WIDTH 80 এর পরিবর্তে WIDTH কলাম ব্যবহার করে
%echo 12345|fold -w1
1
2
3
4
5
"paste -sd\& -"- &বিভাজক হিসাবে ব্যবহার করে ইনপুট লাইনগুলি একত্রিত করবে
পেস্ট - ফাইলের লাইন মার্জ
-s, --seial সমান্তরাল পরিবর্তে একবারে একটি ফাইল পেস্ট করুন
-d, --delimiters = তালিকাগুলির পরিবর্তে তালিকা থেকে অক্ষর পুনরায় ব্যবহার করুন
%fold -w1|paste -sd\& -
1&2&3&4&5
(দ্রষ্টব্য যে যদি ইনপুটটিতে বেশ কয়েকটি লাইন থাকে তবে তারা এতে যোগদান করবে &)
echo "abcdeéèfg" | fold -1 | paste -sd\& -
sed।
sedনীচে বেশ কয়েকটি ভাল উত্তর পাওয়া যায়। এবং এই কাজটি অন্য উপায়ে কীভাবে সমাধান করা যায় তা প্রদর্শনের ক্ষেত্রে আমি কোনও ক্ষতি দেখছি না।
sed 's/\B/\&/g'
\ বি - সর্বত্র মিলছে তবে একটি শব্দের সীমানায়; এটি কি মিলে যায় যদি বামে অক্ষর এবং ডানে বর্ণের অক্ষর হয় উভয়ই "শব্দ" অক্ষর বা উভয়ই "অ-শব্দ" অক্ষর।
তথ্য: জিএনইউ সেড ম্যানুয়াল, নিয়মিত অভিব্যক্তি এক্সটেনশন ।
পরীক্ষামূলক:
sed 's/\B/\&/g' <<< '12345'
1&2&3&4&5
এটি অন্যান্য উত্তরগুলির তুলনায় কিছুটা ধীর হবে তবে এটি বেশ পরিষ্কার:
echo 12345 | perl -lnE 'say join "&", split //'
এখানে অন্য উপায়। সেড এক্সপ্রেশনটির প্রথম অংশটি প্রতিটি চরিত্রকে ক্যাপচার করে তারপরে এটি চরিত্র এবং একটি অ্যাম্পারস্যান্ডের সাথে প্রতিস্থাপন করে। দ্বিতীয় অংশটি লাইনের প্রান্ত থেকে অ্যাম্পারস্যান্ডটি সরিয়ে দেয়।
echo 12345 | sed -r 's/(.)/\1\&/g;s/\&$//g'
1&2&3&4&5
মাল্টিবাইট চরিত্রগুলিতেও কাজ করে।
sedদু'বার কল করার দরকার নেই , একটি sedস্ক্রিপ্টে কয়েকটি কমান্ড থাকতে পারে:sed -r 's/(.)/\1\&/g; s/\&$//g'
012345ইনপুট