এই ডাব্লু / সম্পর্কে জানার কয়েকটি উপায় রয়েছে sed
। একটি উপায় হ'ল বিলম্বিত পড়া যা গ্রহণযোগ্য উত্তরে প্রস্তাবিত। এটি এর মতোও লেখা যেতে পারে:
sed -e '$!N;P;/\nPointer/r file1' -e D file2
... হোল্ড বাফার দিয়ে অন্য কোথাও লুক-ব্যাক বাস্তবায়নের পরিবর্তে কিছুটা স্পষ্ট বর্ণনামূলক। যে অবশ্যম্ভাবীরূপে শেষ লাইনটি যে @don_crissti নোট, যদিও, কারণ সঙ্গে একই সমস্যা থাকবে N
না লাইন চক্র বৃদ্ধি এবং r
EAD কমান্ড লাইন সংখ্যা দ্বারা প্রয়োগ করা হয়।
আপনি এটি কাছাকাছি পেতে পারেন:
echo | sed -e '$d;N;P;/\nPointer/r file1' -e D file2 -
সমস্ত sed
এস -
স্ট্যান্ডার্ড ইনপুট বোঝার জন্য ব্যাখ্যা করবেন না , তবে অনেকেই করেন। ( পসআইএক্স বলছে স্ট্যান্ডার্ড-ইন মানে sed
সমর্থন -
করা উচিত যদি প্রয়োগকারীরা -
স্ট্যান্ডার্ড-ইন বলতে চান তবে ???)
আরেকটি উপায় হ'ল সংযুক্ত কন্টেন্টটি পরিচালনা করা। এখানে আরও একটি কমান্ড রয়েছে যা একইভাবে আউটপুটকে শিডিয়ুলr
করে ইডটি করে, এবং sed
এটি প্রয়োগ করে এবং r
সেগুলি যাতে স্ক্রিপ্ট করা হয় সেভাবে তা সংযোজন করবে । এটা ব্যবহার করে entails - এটি একটি সামান্য আরো জড়িত যদিও এর sed
থেকে a
ppend 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
এবং এটি আমাদের \n
ewline এর সাথে অনুসরণ করব তারপরে ppend এর a\\
জন্য কমান্ডটি a
একটি \n
ewline অনুসরণ করবে। আমাদের শীর্ষস্থানীয় বাকী সমস্ত রেখাগুলি H
সেই শেষ \n
ewline অনুসরণ করে ।
প্রথম যে স্ক্রিপ্টটি লিখেছেন তা দেখতে এরকম কিছু দেখাচ্ছে:
/Pointer-file2 "23"/!p;//!d
r file1
a\
Pointer-file2 "23"
মূলত দ্বিতীয়টি sed
প্রতিটি লাইন মুদ্রণ করবে তবে প্রথমটি sed
সেটাকে a
পেপেন্ড করার জন্য সেট করে । সেই নির্দিষ্ট লাইনের জন্য স্ট্যান্ডার্ড-আউটতে দুটি বিলম্বিত লেখাগুলি নির্ধারিত হয় - প্রথমটি হ'ল r
ইড file1
এবং দ্বিতীয়টি এটির পরে আমরা যে লাইনের চাই তার একটি অনুলিপি। এই ক্ষেত্রে প্রথম sed
চিকিত্সা করা এমনকি প্রয়োজনীয় নয় (দেখুন? কোনও ব্যাকস্ল্যাশ নেই) তবে যখনই কোনও প্যাটার্ন ম্যাচটি ইনপুট হিসাবে পুনরায় প্রকাশ করা হয় আমি নিরাপদে যেভাবে এখানে থাকি তা নিরাপদে পালানো গুরুত্বপূর্ণ।
যাইহোক, তাই ... কয়েকটি উপায় আছে।