আমি জিএনইউ 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"