আমি জিএনইউ sed, পসিক্স sedএবং বিএসডি'র sedঅসংখ্য বিকল্পের সাথে বিভ্রান্ত । \nএই তিন প্রকারটি ব্যবহার করে আমি কীভাবে নতুন লাইনের চরিত্রের সাথে আক্ষরিক প্রতিস্থাপন করব sed?
foo\\nbarবা এর মতো হতে চান foo\\\nbar?
আমি জিএনইউ sed, পসিক্স sedএবং বিএসডি'র sedঅসংখ্য বিকল্পের সাথে বিভ্রান্ত । \nএই তিন প্রকারটি ব্যবহার করে আমি কীভাবে নতুন লাইনের চরিত্রের সাথে আক্ষরিক প্রতিস্থাপন করব sed?
foo\\nbarবা এর মতো হতে চান foo\\\nbar?
উত্তর:
sed 's/\\n/\
/g'
প্রতিস্থাপনের স্ট্রিংয়ে ফিরতি আঘাতের ঠিক আগে ব্যাকস্ল্যাশটি লক্ষ্য করুন।
sed১৯৯৯ সালে ইউনিক্স ভি in-তে মূল কমান্ডের সাথে কাজ করেছিলেন that একমাত্র জায়গা যেখানে এটি কাজ করতে পারে না সেটি হ'ল sedকিছু পলড-ডাউন ব্যস্তবক্স-ভিত্তিকের মতো নন-পসিক্স স্ট্রিপ-ডাউন বাস্তবায়ন । এটি csh এ কাজ করবে না তবে এটি একটি csh সমস্যা।
\\nঅনুসন্ধান অংশে ব্যবহৃত হয়, তাই কেন \nপ্রতিস্থাপনে ব্যবহার করবেন না? প্রাক্তন মনে করে যে পরবর্তীকালের উপস্থিতি আছে। অর্থাত। কেন এটি নয়$ echo '1\n2'|sed 's/\\n/\n/g'
\nএটি একটি আক্ষরিক, যা বোঝায় যে এটি দুটি চরিত্র হিসাবে উপস্থিত হবে: অ্যাকাক্ল্যাশ অনুসরণ করা হবে n, এবং একক নিউলাইন চরিত্র হিসাবে নয়। অতএব, ব্যাকস্ল্যাশকে আক্ষরিক তৈরি করার জন্য দুটি ব্যাকস্ল্যাশ এবং তারপরেn
যেহেতু আপনার কাছে ইতিমধ্যে আপনার বহনযোগ্য sedউত্তর রয়েছে, আমি কেবল উল্লেখ করব যে sedখুব কমই সেরা হাতিয়ার যদি আপনার কোনওরকমভাবে নিউলাইনগুলি হস্তক্ষেপ করতে হয়। পার্ল প্রায় পোর্টেবল হিসাবে প্রায় sed, বেশিরভাগ * নিক্স সিস্টেমে ডিফল্টরূপে ইনস্টল করা হয় এবং এটি খুব সহজেই মোকাবেলা করতে পারে:
printf '%s\n' 'aa\nbb' | perl -pe 's/\\n/\n/g'
অন্য খুব বহনযোগ্য পছন্দ awk:
printf '%s\n' 'aa\nbb' | awk '{gsub("\\\\n","\n")};1'
সোলারিসে, / ইউএসআর / এক্সপিজি 4 / বিনে স্ট্যান্ডার্ড অ্যাডক ব্যবহার করতে মনে রাখবেন, / বাইনটি একটি historicalতিহাসিক এবং নতুন স্ক্রিপ্টগুলির জন্য ব্যবহার করা উচিত নয়।
awkএকই রকম বহনযোগ্য সমস্যা রয়েছে (আমার awkপ্লেইনটি পুরানো awk, nawkনাকি gawk?) আসলে, আমার সোলারিস বাক্সগুলির সংস্করণটির অভাব রয়েছে gsub()। আমার ভোট এখানে পার্লের জন্য ( perl -nlawe '...'এর স্বয়ংক্রিয় আচরণের প্রায় কাছাকাছি awk)।
awkবহনযোগ্যতার জন্য, এর একটি সংস্করণটি পসিক্সের সাথে awkঅনুগত এবং কেবল সেই বৈশিষ্ট্যগুলি ব্যবহার করুন এবং আপনার ভাল হওয়া উচিত। সোলারিস এ আপনি একটি হিসাবে পাবেন /usr/xpg4/bin/awk।
echo "aa\nbb" | awk '{gsub(/\\n/,"\n");}1;'?
gsub()সর্বত্র সর্বত্র কাজ করা উচিত। এমনকি ব্যস্তবক্সে একটি রয়েছে awk।
যদি Hখালি oldspace হয় আপনার কাছে করতে পারেন:
sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'
... তবে অক্সান্টের উত্তর ইতিমধ্যে দ্রুত এবং আরও সহজ উভয়, যাতে আপনি এটি হিসাবে নিতে পারেন।
আরেকটি বহিরাগত সম্ভাবনা:
INPUT | sed -n l | while read v ; do printf "${v%?}" ; done
তবে সাবধান, ^ যে সমস্ত স্ট্যান্ডার্ড সি-স্টাইলের \ব্যাকস্ল্যাশ \bপলায়নের অনুবাদ করে - যেমন অ্যাক্স \rস্পেস এবং \00ইট र्न এবং অষ্টাল এবং হোয়াটহ্যাউ ou
সঙ্গে gnu sedনিম্নলিখিত এছাড়াও কাজ করে:
gsed -n -e 'H;${x;s/\\n/\n/g;p;}'
সিডে আপনার একটি সমাধান প্রয়োজন, এবং এটি ইতিমধ্যে নীচে দেওয়া হয়েছে। তবে আমি আরেকটি সম্ভাবনা যুক্ত করতে চেয়েছিলাম যে আইএমএইচও কেবল সহজ এবং দ্রুত,
tr -d "\n"