আপনি যা sed
করতে পারেন তা সহ:
sed '/\n/P;//d;s/[^?]*/\n&\n/[num];D'
... যেখানে আপনি উপরেরটিকে [num]
কিছু সংখ্যক পছন্দসই সংঘটিত প্রতিনিধিত্ব করে প্রতিস্থাপন করবেন ।
আপনি উল্লিখিত উদাহরণ হিসাবে প্রদর্শিত হিসাবে চিহ্নিত নির্দিষ্ট সংঘটন উপস্থিত না থাকলে, sed
কেবল কিছুই মুদ্রণ করবে।
echo ,2,3 | sed '/\n/P;//d;s/[^,]*/\n&\n/4;D'
প্রথম ম্যাচের উপরে শূন্য বা আরও বেশি না-কমা অক্ষরের অনুক্রমের জন্য প্রথম কমাটির আগে ঘটে যাওয়া শূন্য অক্ষর। দ্বিতীয়টি 2
এবং তৃতীয়টি হ'ল 3
- সেই ধরণের কোনও চতুর্থ ঘটনা নেই এবং তাই প্রতিস্থাপনটি সফল হয় না।
এও নোট করুন যে প্রত্যেকে ডান-হাতের প্রতিস্থাপন ক্ষেত্রের ক্ষেত্রে নিউলাইন পলায়নকে sed
সমর্থন করবে না \n
এবং আপনাকে n
পালানোর স্ট্রিংয়ের অক্ষরগুলিকে আক্ষরিক নতুন লাইনের সাথে প্রতিস্থাপন করতে হতে পারে ।
sed '/\n/P;//d;s/[^?]*/\
&\
/[num];D'
আপনার স্ট্রিং দিয়ে এটি করে:
str='> Leslie Cheung April 1 ? Elvis August 16 ? Leonard Nimoy February 27'
for o in 1 2 3
do printf %s\\n "$str" |
sed "/\n/P;//d;s/[^?]*/\n:$o:&\n/$o;D"
done
... যা সামান্য for
লুপ যা sed
3 [^?]*
টি ম্যাচ এবং প্রিন্টের চেষ্টা করে 3 বার চালায় ...
:1:> Leslie Cheung April 1
:2: Elvis August 16
:3: Leonard Nimoy February 27
... বা প্রতিটি মানের জন্য একটি $o
।
[num]
নাল-নালাগুলির মতো ঘটনাগুলি এড়াতে আপনি এটিকে সামান্য প্রসারিত করতে পারেন:
i=
until [ "$((i+=1))" -gt 10 ] &&
printf %s\\n "$str"
do printf %s ":$i:$str?"; done |
sed '/..*\n?*/P;s///;s/[^?]*/\n&\n/7;D'
... যা ছাপায় ...
:3:> Leslie Cheung April 1
Elvis August 16
Leonard Nimoy February 27
:10:> Leslie Cheung April 1
এটিও অন্তর্ভুক্ত হতে পারে । উদাহরণ স্বরূপ:
printf %s\\n "$str?$str" |
sed '/.*\n[^_[:alnum:]]*/P;s///
s/[_[:alnum:]]\{1,\}/\n&\n/3;D'
... যা প্রত্যেকটি পৃথক রেখায় প্রতিটি তৃতীয় _
বর্ণমালার এবং নখের ক্রম অনুসারে আপনার দুটি স্ট্রিংয়ের মিশ্রণে মুদ্রণ করে ...
April
August
Nimoy
Leslie
1
16
February
cut
পরিবর্তে ব্যবহার করবgrep
:echo ... | cut '-d?' -f2