صفحه نخست

پنجاه مثال تک خطی sed - بخش اول

در تمام مثال‌های این بخش، دستورات sed را بر روی فایل data.txt اعمال می‌کنیم. محتویات فایل را در کادر زیر می‌بینید:

Bash
$ cat data.txt
      This is line number: #1
This is line number: #2
                   This is line number: #3
           This is line number: #4
This is line number: #5
This is line number: #6     
This is line number: #7
        This is line number: #8     
This is line number: #9
This is line number: #10
This is line number: #11
  This is line number: #12    
This is line number: #13

چنانچه نکته‌ای در مثال حائز اهمیت باشد بعد از ذکر مثال در مورد آن توضیحی داده شده است.

مثال 1) ابتدا و انتهای هر خط را با کاراکترهای > و < علامتگذاری کنید.

Bash
$ sed 's/^/</;s/$/>/' data.txt
<      This is line number: #1>
<This is line number: #2>
<                   This is line number: #3>
<           This is line number: #4>
<This is line number: #5>
<This is line number: #6     >
<This is line number: #7>
<        This is line number: #8     >
<This is line number: #9>
<This is line number: #10>
<This is line number: #11>
<  This is line number: #12    >
<This is line number: #13>

همان‌طور که مشاهده می‌کنید در ابتدای خطوط ۱ و ۳ و ۴ و ۸ و ۱۲ و انتهای خطوط ۶ و ۸ و ۱۲ تعدای فضای خالی یا کاراکتر space قرار دارد.

مثال 2) یک خط خالی زیر هر خط اضافه کنید.

Bash
$ sed 'G' data.txt
      This is line number: #1
 
This is line number: #2
 
                   This is line number: #3
 
           This is line number: #4
 
This is line number: #5
 
This is line number: #6     
 
This is line number: #7
 
        This is line number: #8     
 
This is line number: #9
 
This is line number: #10
 
This is line number: #11
 
  This is line number: #12    
 
This is line number: #13

دستور G که ابتدای کلمه Get می‌باشد یک n\ به pattern space اضافه و سپس محتوای hold space را به انتهای pattern space اضافه می‌کند. در اینجا چون hold space خالی است بنابر این زیر هر خط تنها یک خط خالی چاپ می‌شود.

مثال 3) یک خط خالی بالای هر خط اضافه کنید.
Bash
$ sed 'x;p;x' data.txt
 
      This is line number: #1
 
This is line number: #2
 
                   This is line number: #3
 
           This is line number: #4
 
This is line number: #5
 
This is line number: #6     
 
This is line number: #7
 
        This is line number: #8     
 
This is line number: #9
 
This is line number: #10
 
This is line number: #11
 
  This is line number: #12    
 
This is line number: #13
دستور x محتوای pattern space و hold space را با هم تعویض یا exchange می‌کند .

مثال 4) یک خط خالی زیر و یک خط خالی بالای هر خط اضافه کنید.
Bash
$ sed 'x;p;x;G' data.txt
 
      This is line number: #1
 
 
This is line number: #2
 
 
                   This is line number: #3
 
 
           This is line number: #4
 
 
This is line number: #5
 
 
This is line number: #6     
 
 
This is line number: #7
 
 
        This is line number: #8     
 
 
This is line number: #9
 
 
This is line number: #10
 
 
This is line number: #11
 
 
  This is line number: #12    
 
 
This is line number: #13

مثال 5) فضاهای خالی ابتدای هر خط را حذف کنید.
Bash
$ sed 's/^[ \t]*//' data.txt
This is line number: #1
This is line number: #2
This is line number: #3
This is line number: #4
This is line number: #5
This is line number: #6     
This is line number: #7
This is line number: #8     
This is line number: #9
This is line number: #10
This is line number: #11
This is line number: #12    
This is line number: #13

مثال 6) فضاهای خالی انتهای هر خط را حذف کنید. برای بررسی صحت انجام دستور انتهای خط را با کاراکتر < مشخص کنید.
Bash
$ sed 's/[ \t]*$/>/' data.txt
      This is line number: #1>
This is line number: #2>
                   This is line number: #3>
           This is line number: #4>
This is line number: #5>
This is line number: #6>
This is line number: #7>
        This is line number: #8>
This is line number: #9>
This is line number: #10>
This is line number: #11>
  This is line number: #12>
This is line number: #13>

مثال 7) فضاهای خالی ابتدا و انتهای هر خط را حذف کنید. برای بررسی صحت انجام این دستور (حذف فضای خالی انتهای خطوط‌) محتوای هر خط را بین کاراکترهای > و < محصور کنید.
Bash
$ sed 's/^[ \t]*/</;s/[ \t]*$/>/' data.txt
<This is line number: #1>
<This is line number: #2>
<This is line number: #3>
<This is line number: #4>
<This is line number: #5>
<This is line number: #6>
<This is line number: #7>
<This is line number: #8>
<This is line number: #9>
<This is line number: #10>
<This is line number: #11>
<This is line number: #12>
<This is line number: #13>

مثال 8) ۵ کاراکتر < را به ابتدای تمامی خطوطی که با space شروع نمی‌شوند اضافه کنید.
Bash
$ sed '/^[ \t]/ !s/^/>>>>>/' data.txt
      This is line number: #1
>>>>>This is line number: #2
                   This is line number: #3
           This is line number: #4
>>>>>This is line number: #5
>>>>>This is line number: #6     
>>>>>This is line number: #7
        This is line number: #8     
>>>>>This is line number: #9
>>>>>This is line number: #10
>>>>>This is line number: #11
  This is line number: #12    
>>>>>This is line number: #13

مثال 9) خطوط ۵ تا ۸ را نمایش دهید.
Bash
$ sed -n '5,8 p' data.txt
This is line number: #5
This is line number: #6     
This is line number: #7
        This is line number: #8

توجه داشته باشید sed به صورت طبیعی بعد از اتمام هر سیکل محتوای pattern space را بر روی خروجی استاندارد می‌نویسد لذا با استفاده از سوییچ n- این حالت را غیر فعال می‌کنیم و به جای آن در دستوری که به sed می‌دهیم می‌گوییم که فقط در خطوط 5 تا 8 با استفاده از دستور p محتوای pattern space را بر روی خروجی استاندارد چاپ کند.

مثال 10) خط شماره 4 را نمایش دهید.
Bash
$ sed '4 !d' data.txt
           This is line number: #4
دستور d که ابتدای کلمه delete می‌باشد محتوای pattern space را کاملا پاک می‌کند. هنگامی که pattern space کاملا خالی شود سیکل فعلی متوقف می‌شود و چون pattern space خالیست هیچ چیزی بر روی خروجی استاندارد نوشته نمی‌شود و سیکل بعدی (خواندن خط بعدی) و اجرای لیست دستورات از ابتدا برای خط جدید آغاز می‌شود. در مثال بالا به sed می‌گوییم خط ۴ را delete نکن یعنی اینکه مابقی خطوط را delete کن! و به این صورت تنها خط ۴ نمایش داده می شود.

نظر شما



 
 
 

 

کلیه حقوق برای دارنده‌ی سایت محفوظ است.