حذف خطوط خالی از فایل – Bash

توسط: vahit

postسلام

هنگام نوشتن یه اسکریپت Bash ممکنه لازم داشته باشیم که خطوط خالی یک فایل رو برای پردازش هر چه راحتتره اون نادیده بگیریم امّا چطور باید اینکار رو بکنیم؟!

اگر با دستور grep کار کرده باشید می‌دونید که کارش جستجوی یک الگو داخل یک فایل یا یک استریم هست و خروجیش همه‌ی خطوطی هست که داخل اون الگو صدق می‌کنن. برای مثال دستور زیر رو در نظر بگیرید:

بخش دوّم دستور که ورودیش رو از طریق پایپ (‪pipe (|)‬) از دستور lsmod گرفته همه‌ی خطوطی که توی اونها عبارت brcm وجود داره رو نشون می‌ده و بقیه رو حذف می‌کنه. آپشن ignore-case دستور grep رو در جریان این کار می‌زاره که نیازی به بررسی بزرگ یا کوچک بودن حروف عبارت نیست. یا مثلاً دستور زیر با استفاده از الگوی “^” به دستور grep می‌فهمونه که همه‌ی خطوطی که با الگوری brcm شروع می‌شن رو برگردونه (کاراکتر ^ برای نشون دادن ابتدای خط به کار می‌ره):

یا به عنوان یک مثال دیگه، دستور زیر با استفاده از یک دستور grep دیگه، همه‌ی خطوطی که به حرف c ختم می‌شن رو نشون می‌ده. برای این کار از الگوی “$” برای نشون دادن آخر خط استفاده می‌کنه:

دستور grep آپشنی به اسم invert-match داره که خروجی رو برعکس می‌کنه، یعنی همه‌ی خطوطی که در الگو صدق نمی‌کنن رو چاپ می‌کنه. برای مثال دستور زیر همه‌ی خطوط فایل resolve.conf رو نشون می‌ده بغیر از اونهایی که شامل کاراکتر # هستن:

خب این همه صغرا و کبرا چیدیم که برسیم به اینجا که وقتی لازم داشتیم که خطوط خالی یک فایل رو حذف کنیم می‌تونیم از دستور grep با ترکیب آپشن‌ها و الگوهایی که بررسی کردیم استفاده کنیم. یعنی از الگوی ‪”^$“‬ برای تشخیص خطوط خالی استفاده کنیم و با استفاده از آپشن invert-match همه‌ی خطوطی که شامل این الگو نمی‌شن رو فقط نشون بدیم. الگوی ‪”^$“‬ از این جهت شامل خطوط خالی می‌شه که بین نشانگر اوّل خط (^) و نشانگر آخر خط ($) هیچ کاراکتر دیگه‌ای وجود نداره! برای مثال به دستورات زیر توجه کنید: