পোর্টেবলভাবে একটি নতুন লাইনে ably n প্রতিস্থাপন করুন


23

আমি জিএনইউ sed, পসিক্স sedএবং বিএসডি'র sedঅসংখ্য বিকল্পের সাথে বিভ্রান্ত । \nএই তিন প্রকারটি ব্যবহার করে আমি কীভাবে নতুন লাইনের চরিত্রের সাথে আক্ষরিক প্রতিস্থাপন করব sed?


তাদের বিভিন্ন জিনিস রয়েছে, আপনি কোন অংশটি জানতে চান?
cuonglm

@ জ্ঞাক আমি এখন এটি স্পষ্ট মনে করি।
অবিনাশ রাজ

1
আপনি কি এই প্রশ্নটি একবার দেখেছেন ?
গ্রাওক্সিড্ডা

2
আপনি কি ইনপুটটিতে foo\\nbarবা এর মতো হতে চান foo\\\nbar?
গিলস 'এস-অশুভ হওয়া বন্ধ করুন'

সরল, foo, পরের লাইনে এটি বার হবে।
অবিনাশ রাজ

উত্তর:


30
sed 's/\\n/\
/g'

প্রতিস্থাপনের স্ট্রিংয়ে ফিরতি আঘাতের ঠিক আগে ব্যাকস্ল্যাশটি লক্ষ্য করুন।


এটি কি সব ধরণের সেডের জন্য কাজ করে?
অবিনাশ রাজ

আমি বিশ্বাস করি এটি করা উচিত; আমি শুধুমাত্র লিনাক্সে gnu সংস্করণ ব্যবহার করে পরীক্ষা করেছি।
আনসার্ট

11
@AvinashRaj। এটি পসিক্স এবং sed১৯৯৯ সালে ইউনিক্স ভি in-তে মূল কমান্ডের সাথে কাজ করেছিলেন that একমাত্র জায়গা যেখানে এটি কাজ করতে পারে না সেটি হ'ল sedকিছু পলড-ডাউন ব্যস্তবক্স-ভিত্তিকের মতো নন-পসিক্স স্ট্রিপ-ডাউন বাস্তবায়ন । এটি csh এ কাজ করবে না তবে এটি একটি csh সমস্যা।
স্টাফেন চেজেলাস

যেহেতু \\nঅনুসন্ধান অংশে ব্যবহৃত হয়, তাই কেন \nপ্রতিস্থাপনে ব্যবহার করবেন না? প্রাক্তন মনে করে যে পরবর্তীকালের উপস্থিতি আছে। অর্থাত। কেন এটি নয়$ echo '1\n2'|sed 's/\\n/\n/g'

এই ক্ষেত্রে, \nএটি একটি আক্ষরিক, যা বোঝায় যে এটি দুটি চরিত্র হিসাবে উপস্থিত হবে: অ্যাকাক্ল্যাশ অনুসরণ করা হবে n, এবং একক নিউলাইন চরিত্র হিসাবে নয়। অতএব, ব্যাকস্ল্যাশকে আক্ষরিক তৈরি করার জন্য দুটি ব্যাকস্ল্যাশ এবং তারপরেn
অপসারণ

9

যেহেতু আপনার কাছে ইতিমধ্যে আপনার বহনযোগ্য 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)।
এরিয়েলকো

2
@arielCo: awkবহনযোগ্যতার জন্য, এর একটি সংস্করণটি পসিক্সের সাথে awkঅনুগত এবং কেবল সেই বৈশিষ্ট্যগুলি ব্যবহার করুন এবং আপনার ভাল হওয়া উচিত। সোলারিস এ আপনি একটি হিসাবে পাবেন /usr/xpg4/bin/awk
স্ক্রুটিনাইজার

@ এটারডন কেমন আছেন echo "aa\nbb" | awk '{gsub(/\\n/,"\n");}1;'?
অবিনাশ রাজ

@arielCo প্রকৃতপক্ষে, awk পার্লের চেয়ে বেশি বহনযোগ্য । আমার দ্বিতীয় জনস্রোত পদ্ধতি যা ব্যবহার করে না তার gsub()সর্বত্র সর্বত্র কাজ করা উচিত। এমনকি ব্যস্তবক্সে একটি রয়েছে awk
টেরডন

1
gsub () হ'ল POSIX (gsub, SVR3.1 এ যুক্ত হয়েছিল, POSIX awk এসভিআর 4 এর উপর ভিত্তি করে কয়েকটি সংযোজন সহ আরও তথ্যের জন্য গাক ম্যানুয়াল দেখুন), জেনসুব () GNU এক্সটেনশন। মূল সন্ত্রাসটি এখনও সোলারিসে / bin / awk হিসাবে পাওয়া যায়, gsub () সমর্থন করে না, তবে কোনও বহু-চরিত্রের FS সমর্থন করে না।
স্টাফেন চেজেলাস

1

যদি 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



-2

সিডে আপনার একটি সমাধান প্রয়োজন, এবং এটি ইতিমধ্যে নীচে দেওয়া হয়েছে। তবে আমি আরেকটি সম্ভাবনা যুক্ত করতে চেয়েছিলাম যে আইএমএইচও কেবল সহজ এবং দ্রুত,

tr -d "\n"

1
এটা কি করে? ইনপুট থেকে সমস্ত নতুনলাইন মুছবেন?
মাইকজার্ভ

হ্যাঁ, এটি ঠিক তাই করে
জম্পুক

5
কিন্তু কেন? প্রশ্নটির সাথে এটার কী সম্পর্ক আছে?
মাইকজার্ভ

1
যখন প্রশ্নটি জিজ্ঞাসা করছে প্রকৃত নিউলাইনগুলির সাথে "\ n" স্ট্রিংটি কীভাবে প্রতিস্থাপন করা হবে তখন এটি কেবল "\ n" সরিয়ে দেয়।
spuder
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.