আমি sed
কিছু অভিব্যক্তি অনুসারে ফিল্টার মেলানো লাইনগুলি কীভাবে তৈরি করতে পারি , তবে না মিলে যাওয়া লাইনগুলিকে মুদ্রণ করার পরিবর্তে তা উপেক্ষা করব?
প্রকৃত উদাহরণ হিসাবে, আমি scalac
ফাইলের একটি সেটে (স্কালা সংকলক) চালাতে চাই এবং তৈরি করা ফাইলগুলি এর -verbose
আউটপুট থেকে পড়তে চাই .class
। scalac -verbose
বার্তাগুলির একগুচ্ছ ফলাফল দেয়, তবে আমরা কেবল ফর্মটির মধ্যে আগ্রহী [wrote some-class-name.class]
। আমি বর্তমানে যা করছি তা হ'ল ( |&
পরবর্তী প্রোগ্রামটিতে স্ট্যাডারকে পাইপ দেওয়ার জন্য বাশ 4.0 এর উপায়):
$ scalac -verbose some-file.scala ... |& sed 's/^\[wrote \(.*\.class\)\]$/\1/'
এটি আমাদের আগ্রহী বার্তাগুলি থেকে ফাইলের নামগুলি বের করে দেবে, তবে অন্য সমস্ত বার্তাগুলিও অপরিবর্তিত অবস্থায় দিয়ে যেতে দেবে! অবশ্যই আমরা এর পরিবর্তে এটি করতে পারি:
$ scalac -verbose some-file.scala ... |& grep '^\[wrote .*\.class\]$' |
sed 's/^\[wrote \(.*\.class\)\]$/\1/'
যা কাজ করে তবে দেখতে অনেকটা বাস্তব সমস্যা ঘুরে দেখার মতো, যা কীভাবে sed
ইনপুট থেকে অ-ম্যাচিং লাইনগুলিকে উপেক্ষা করার নির্দেশ দেয়। তাই কিভাবে আমরা তা করতে পারি?