- روند طبیعی ابزار sed بدین صورت است :
- که ابتدا خط اول از فایل یا ورودی خوانده میشود.
- سپس آن خط را درون pattern buffer میریزد.
- قوانینی که توسط کاربر تعیین شده است را اعمال می کند.
- خروجی قوانین را چاپ می کند.
- این فرایند و این حلقه به تعداد خطوط فایل یا ورودی تکرار می شود.
- حال در صورتی که از سویچ n- استفاده شود، خطوطی که مطابقتی با قوانین ندارند، چاپ نمیشوند.
توضیح با مثال ۱
- پرونده زیر را به عنوان input.txt در نظر بگیرید :
|
1 2 3 4 |
line1 line2 line3 line4 |
- قانونی را وضع میکنیم که خط سوم نمایش داده شود. برای این منظور :
|
1 2 |
# sed -n '3p' input.txt line3 |
- در صورتی که از سویچ n- استفاده نکنیم، اتفاق زیر روی میدهد :
|
1 2 3 4 5 6 |
# sed '3p' input.txt line1 line2 line3 line3 line4 |
- همان طور که ملاحظه میکنید، تک تک خطوط چاپ شدند (زیرا خروجی pattern buffer به صورت پیش فرض چاپ میشود)
- همچنین خط سوم دو بار چاپ شد. یک بار برای خروجی pattern buffer و یک بار به خاطر مطابقت با قانونی که وضع کرده بودیم)
- پس در نتیجه عدم استفاده از سویچ n- باعث میشود تا خروجی pattern buffer (فارغ از این که با قانونی که وضع کردیم تطابق دارد یا نه) چاپ شود.
توضیح با مثال ۲
- پرونده زیر را به عنوان input.txt در نظر بگیرید :
|
1 2 3 4 |
line1 line2 line3 line4 |
- قانونی را وضع میکنیم که خط سوم پاک شود. برای این منظور :
|
1 2 3 4 |
# sed '3d' input.txt line1 line2 line4 |
- در صورتی که از سویچ n- استفاده کنیم :
|
1 |
# sed -n '3d' input.txt |
- همان طور که ملاحظه میکنید، دستور بالا هیچ خروجیای ندارد.
- چرا که از سویچ n- استفاده کردیم لذا خطوط ۱ و ۲ و ۴ که با قانون تطابق ندارند، نمایش داده نمیشود.
- همچنین خط سوم که با قانون تطابق دارد نیز نمایش داده نشده است چرا که قانونی که وضع کردیم مبنی بر پاک کردن خط سوم است.
- در نتیجه هیچ خروجی ای از دستور بالا بدست نمیآید.
- باید توجه داشت که استفاده از سویچ n- باید متناسب با قانونی که وضع میشود، مورد استفاده قرار گیرد.