নিম্নলিখিতটি TERMINATE
ফাইলের শেষ অবধি লাইনের সাথে মিলে মুদ্রণ করবে :
sed -n -e '/TERMINATE/,$p'
বর্ণিত: এতে প্রতিটি স্ক্রিপ্টের স্ক্রিপ্ট কার্যকর করার পরে মুদ্রণের -n
ডিফল্ট আচরণটি অক্ষম sed
করে, এতে -e
একটি স্ক্রিপ্ট নির্দেশ করে sed
, /TERMINATE/,$
একটি ঠিকানা (লাইন) পরিসীমা নির্বাচন মানে TERMINATE
ফাইলের শেষের দিকে নিয়মিত এক্সপ্রেশন (গ্রেপের মতো) এর সাথে প্রথম লাইনের সাথে মিল থাকে ( $
) , এবং p
এটি মুদ্রণ কমান্ড যা বর্তমান লাইনটি প্রিন্ট করে।
এটি TERMINATE
ফাইলের শেষ অবধি লাইনটি মিলে যাওয়া লাইনটি থেকে মুদ্রণ করবে :
(ম্যাচিং লাইনটি ইওএফের পরে, ম্যাচিং লাইন সহ নয়)
sed -e '1,/TERMINATE/d'
বর্ণিত: 1,/TERMINATE/
একটি ঠিকানা (লাইন) রেঞ্জ নির্বাচন যা TERMINATE
নিয়মিত অভিব্যক্তির সাথে মিল থাকা প্রথম লাইনটির জন্য ইনপুটটির জন্য প্রথম লাইন এবং d
মুছে ফেলা কমান্ড যা বর্তমান লাইনটি মুছে ফেলে এবং পরবর্তী লাইনে চলে যায়। sed
ডিফল্ট আচরণটি লাইনগুলি মুদ্রণ করা হিসাবে এটি TERMINATE
ইনপুট শেষ হওয়ার পরে লাইনগুলি মুদ্রণ করবে ।
সম্পাদনা:
আপনি যদি আগে লাইনগুলি চান TERMINATE
:
sed -e '/TERMINATE/,$d'
এবং যদি আপনি TERMINATE
একক পাসে 2 টি ভিন্ন ফাইলের আগে এবং পরে উভয় লাইন চান :
sed -e '1,/TERMINATE/w before
/TERMINATE/,$w after' file
ফাইলগুলির আগে এবং পরে সমাপ্তির সাথে লাইন থাকবে, সুতরাং আপনার প্রতিটি ব্যবহারের প্রয়োজন হয় যাতে প্রক্রিয়া করার জন্য:
head -n -1 before
tail -n +2 after
Edit2:
যদি আপনি সেড স্ক্রিপ্টে ফাইলের নামগুলি হার্ড-কোড করতে না চান তবে আপনি এটি করতে পারেন:
before=before.txt
after=after.txt
sed -e "1,/TERMINATE/w $before
/TERMINATE/,\$w $after" file
তবে আপনাকে $
শেষ পংক্তির অর্থটি এড়াতে হবে যাতে শেলটি $w
ভেরিয়েবলটি প্রসারিত করার চেষ্টা করবে না (লক্ষ্য করুন যে আমরা এখন একক উদ্ধৃতিগুলির পরিবর্তে স্ক্রিপ্টের চারদিকে ডাবল উদ্ধৃতি ব্যবহার করি)।
আমি বলতে ভুলে গেছি যে স্ক্রিপ্টের ফাইলনামগুলির পরে নতুন লাইনটি গুরুত্বপূর্ণ, যাতে সেড ফাইল ফাইলের নাম শেষ করে তা জানতে পারে।
সম্পাদনা করুন: 2016-0530
সাবাস্তিয়ান ক্ল্যামেন্ট জিজ্ঞাসা করেছিল: "আপনি কীভাবে TERMINATE
একটি ভেরিয়েবল দ্বারা হার্ডকোডযুক্ত প্রতিস্থাপন করবেন ?"
আপনি মিলে যাওয়া পাঠ্যের জন্য একটি পরিবর্তনশীল তৈরি করতে এবং তারপরে এটি পূর্ববর্তী উদাহরণের মতো করুন:
matchtext=TERMINATE
before=before.txt
after=after.txt
sed -e "1,/$matchtext/w $before
/$matchtext/,\$w $after" file
পূর্ববর্তী উদাহরণগুলির সাথে মেলে পাঠ্যের জন্য একটি ভেরিয়েবল ব্যবহার করতে:
## Print the line containing the matching text, till the end of the file:
## (from the matching line to EOF, including the matching line)
matchtext=TERMINATE
sed -n -e "/$matchtext/,\$p"
## Print from the line that follows the line containing the
## matching text, till the end of the file:
## (from AFTER the matching line to EOF, NOT including the matching line)
matchtext=TERMINATE
sed -e "1,/$matchtext/d"
## Print all the lines before the line containing the matching text:
## (from line-1 to BEFORE the matching line, NOT including the matching line)
matchtext=TERMINATE
sed -e "/$matchtext/,\$d"
এই ক্ষেত্রে ভেরিয়েবলের সাথে পাঠ্য প্রতিস্থাপন সম্পর্কে গুরুত্বপূর্ণ পয়েন্টগুলি হ'ল:
- ভেরিয়েবলগুলি (
$variablename
) দ্বারা আবদ্ধ single quotes
[ '
] "প্রসারিত" হবে না তবে ভেরিয়েবলের ভিতরে double quotes
[ "
] হবে। সুতরাং, আপনি যদি কোনও ভেরিয়েবলের সাথে প্রতিস্থাপন করতে চান তবে সেগুলিতে single quotes
আপনাকে সমস্ত পরিবর্তন করতে হবে double quotes
।
sed
রেঞ্জ একটি ধারণ $
এবং অবিলম্বে মত একটি চিঠি দ্বারা অনুসরণ করা হয়: $p
, $d
, $w
। তারা ভেরিয়েবল দেখতে কেমন হবে প্রসারিত করা, তাই আপনি ঐ অব্যাহতি আছে $
একটি ব্যাকস্ল্যাশ [দিয়ে অক্ষর \
] পছন্দ করে: \$p
, \$d
, \$w
।
grep 'TERMINATE' file