এই ডাব্লু / সম্পর্কে জানার কয়েকটি উপায় রয়েছে sed। একটি উপায় হ'ল বিলম্বিত পড়া যা গ্রহণযোগ্য উত্তরে প্রস্তাবিত। এটি এর মতোও লেখা যেতে পারে:
sed -e '$!N;P;/\nPointer/r file1' -e D file2
... হোল্ড বাফার দিয়ে অন্য কোথাও লুক-ব্যাক বাস্তবায়নের পরিবর্তে কিছুটা স্পষ্ট বর্ণনামূলক। যে অবশ্যম্ভাবীরূপে শেষ লাইনটি যে @don_crissti নোট, যদিও, কারণ সঙ্গে একই সমস্যা থাকবে N না লাইন চক্র বৃদ্ধি এবং rEAD কমান্ড লাইন সংখ্যা দ্বারা প্রয়োগ করা হয়।
আপনি এটি কাছাকাছি পেতে পারেন:
echo | sed -e '$d;N;P;/\nPointer/r file1' -e D file2 -
সমস্ত sedএস -স্ট্যান্ডার্ড ইনপুট বোঝার জন্য ব্যাখ্যা করবেন না , তবে অনেকেই করেন। ( পসআইএক্স বলছে স্ট্যান্ডার্ড-ইন মানে sedসমর্থন -করা উচিত যদি প্রয়োগকারীরা -স্ট্যান্ডার্ড-ইন বলতে চান তবে ???)
আরেকটি উপায় হ'ল সংযুক্ত কন্টেন্টটি পরিচালনা করা। এখানে আরও একটি কমান্ড রয়েছে যা একইভাবে আউটপুটকে শিডিয়ুলr করে ইডটি করে, এবং sedএটি প্রয়োগ করে এবং rসেগুলি যাতে স্ক্রিপ্ট করা হয় সেভাবে তা সংযোজন করবে । এটা ব্যবহার করে entails - এটি একটি সামান্য আরো জড়িত যদিও এর sedথেকে append Pointerঅন্য আউটপুট ম্যাচ sedতার লিপিতে।
sed ' /Pointer/!d #only operate on first match
s/[]^$&\./*[]/\\&/g;H #escape all metachars, Hold
s|.*|/&/!p;//!d|p;g #print commands, exchange
s|.|r file1&a\\&|;q' file2| #more commands, quit
sed -nf - file2 #same input file
সুতরাং মূলত প্রথমটি sedদ্বিতীয়টি sedএকটি স্ক্রিপ্ট লিখে , যা দ্বিতীয়টি sedস্ট্যান্ডার্ড-ইনপুট (সম্ভবত ...) এ পড়ে এবং পরিবর্তে প্রযোজ্য। প্রথমটি sedকেবল প্রথম ম্যাচে সন্ধানের জন্য কাজ করে Pointerএবং তারপরে qইউট ইনপুট দেয়। এর কাজটি হ'ল ...
s/[]^$&\./*[]/\\&/g;H
- নিশ্চিত হয়ে নিন যে সমস্ত প্যাটার্ন অক্ষর নিরাপদে ব্যাকস্ল্যাশ-পালিয়ে গেছে কারণ দ্বিতীয়টি
sedএটির অধিকার পেতে আক্ষরিক অর্থে পড়া প্রতিটি বিটকে ব্যাখ্যা করতে হবে। এটি হয়ে গেলে, Hপুরানো জায়গায় একটি অনুলিপি রাখুন ।
s|.*|/&/!p;//!d|p; x
- দ্বিতীয় বলুন
sedকরার pযে ইনপুট লাইন দ্রণ !কিন্তু /&/এক আমরা শুধু প্যাটার্ন-safed; এবং তারপরে dসমস্ত একাদশ করতে হবে। pদ্বিতীয়টি কমান্ডগুলি মুদ্রণ করুন sed, এবং তারপর আমাদের সংরক্ষিত অনুলিপিটিতে কাজ xকরতে hপুরানো এবং প্যাটার্নের বাফারগুলি পরিবর্তন করুন ।
s|.|r file1&a\\&|p;q
- আমরা এখানে কেবলমাত্র
\nচরটিই কাজ করি একটি ইলাইন, কারণ sedআমরা যখন Hলাইনটি আগে প্রবীণ করি তখন একটিটিকে চাপ দেওয়া হবে । সুতরাং আমরা কমান্ডটি সন্নিবেশ করলাম r file1এবং এটি আমাদের \newline এর সাথে অনুসরণ করব তারপরে ppend এর a\\জন্য কমান্ডটি aএকটি \newline অনুসরণ করবে। আমাদের শীর্ষস্থানীয় বাকী সমস্ত রেখাগুলি Hসেই শেষ \newline অনুসরণ করে ।
প্রথম যে স্ক্রিপ্টটি লিখেছেন তা দেখতে এরকম কিছু দেখাচ্ছে:
/Pointer-file2 "23"/!p;//!d
r file1
a\
Pointer-file2 "23"
মূলত দ্বিতীয়টি sedপ্রতিটি লাইন মুদ্রণ করবে তবে প্রথমটি sedসেটাকে aপেপেন্ড করার জন্য সেট করে । সেই নির্দিষ্ট লাইনের জন্য স্ট্যান্ডার্ড-আউটতে দুটি বিলম্বিত লেখাগুলি নির্ধারিত হয় - প্রথমটি হ'ল rইড file1এবং দ্বিতীয়টি এটির পরে আমরা যে লাইনের চাই তার একটি অনুলিপি। এই ক্ষেত্রে প্রথম sedচিকিত্সা করা এমনকি প্রয়োজনীয় নয় (দেখুন? কোনও ব্যাকস্ল্যাশ নেই) তবে যখনই কোনও প্যাটার্ন ম্যাচটি ইনপুট হিসাবে পুনরায় প্রকাশ করা হয় আমি নিরাপদে যেভাবে এখানে থাকি তা নিরাপদে পালানো গুরুত্বপূর্ণ।
যাইহোক, তাই ... কয়েকটি উপায় আছে।