۰
(۰)

در دنیای لینوکس وجود ابزاری قدرتمند که بتواند سریع و بدون نیاز به باز کردن فایل های لینوکسی در ویرایشگر آن را مدیریت کند بسیار ضروری می باشد، sed می‌تواند با استفاده از الگوهای جستجو، جایگزینی و دستورات متنوع، به صورت خودکار تغییرات گسترده‌ای روی فایل‌ها اعمال کند. این ویژگی‌ها sed را به ابزاری بی‌نظیر برای ویرایش فایل‌های متنی حجیم و خودکارسازی فرآیندهای تکراری تبدیل کرده است.

این مقاله به طور جامع به معرفی دستورات اصلی و کاربردی sed پرداخته، و نحوه استفاده از سوئیچ‌ها، الگوها و عملیات پیشرفته مانند جایگزینی، گروه‌بندی و حذف خطوط را بررسی می‌کند. با مطالعه این راهنما، می‌توانید به خوبی از قابلیت‌های sed برای ویرایش متون در محیط‌های لینوکسی استفاده کنید.

تعریف sed:

مخفف Stream Editor (ویرایشگر جریانی) که به راحتی می تواند تعداد زیادی از کلمات را با استفاده از الگوها و دستوارت پیشرفته تغییر دهد.

دستور sed به طور پیش فرض اولین الگویی که با آن تطابق دارد را پیدا کرد و آن را تغییر می دهد و به خط بعدی می رود .

سینتکس دستور sed:

sed Options ‘Script‘ File-name

options: پارامترهای مختلفی هستند که می‌توانند خروجی یا رفتار sed را تغییر دهند.

‘pattern: الگویی که قرار است روی خطوط اعمال شود.

File-name: فایلی است که می‌خواهیم پردازش کنیم.

عملیات‌های پایه در sed

سوئیچ p:

برای چاپ خطوطی که با pattern مطابقت داشته باشند.

سوئیچ n-: 

عدم نمایش خطوط به جزء خطوطی که با  pattern مطابقت دارد.

sed -n '/pattern/p' file.txt

مثال: عدم نمایش تمام خطوط به جزء خطوط شماره ۱ تا ۴..

sed -n '1,4p' file.txt

سوئیچ e-:

امکان اجرای چندین دستور متوالی.

sed -n -e '1,4p' -e '31,34p' file.txt

دستور بالا، خطوط ۱ تا ۴ و ۳۱ تا ۳۴ از فایل متنی را به شما نشان می دهد.

سوئیچ s-: 

 برای جایگزینی یک متن با متن دیگر

sed 's/old_text/new_text/' file.txt

این دستور old_text را با new_text در هر خط جایگزین می‌کند.

سوئیچ d: 

خطوطی را که با pattern مطابقت دارند، حذف می‌کند.

sed '/pattern/d' file.txt

سوئیچ i-: 

به طور پیش‌فرض، sed فقط نتیجه را در خروجی چاپ می‌کند. برای ذخیره تغییرات از سوئیچ i- استفاده می‌کنیم.

sed -i 's/old_text/new_text/g' file.txt

سوئیچ i:

برای درج متن قبل از خطی که با الگوی داده شده مطابقت دارد

sed '/pattern/i\This is a new line' file.txt

سوئیچ a: 

برای درج متن بعد از خطی که با الگوی داده شده مطابقت دارد

sed '/pattern/a\This is a new line' file.txt

مثال: فرض کنید یک فایل به نام file.txt با محتوای زیر داریم:

apple

banana

cherry

date

دو دستور زیر را وارد میکنیم:

sed '/banana/i\This is a new line' file.txt

sed '/banana/a\This is a new line' file.txt

خروجی: 

apple

This is a new line

banana

This is a new line

cherry

date

جهت اضافه کردن خط جدید به خط بعد از خط موردنظر (مثلاً خط دوم) می توانید از دستور زیر استفاده کنید:

sed '2a\This is a new line' file.txt

اگر می خواهید این خط را به خط قبل از خط موردنظر اضافه کنید، باید آپشن a را با i جایگزین کنید:

sed '2i\This is a new line' file.txt

اگر می خواهید چند خط را به خط بعد از خط دوم اضافه کنید، باید این خطوط را به صورت زیر تعریف کنید:

sed '2a\This is line 1\nThis is line 2' file.txt

برای اضافه کردن خط جدید به انتهای فایل هم می توانید از علامت $ استفاده کنید:

sed '$a\This is the last line' file.txt

استفاده از متاکاراکترها در sed:

^ : فقط خطوطی را که با pattern شروع میشود نمایش میدهد.

sed -n '/^pattern/p' file.txt

$ : فقط خطوطی را که با pattern تمام می شوند نمایش میدهد.

sed -n '/pattern$/p' file.txt

*.pattern*. : هر خطی که در آن pattern به کار رفته باشد نمایش میدهد.

sed -n '/.*pattern.*/p' file.txt

سوئیچ g-:

مخفف global می باشد، به طور پیش‌فرض، sed فقط اولین مورد را در هر خط جایگزین می‌کند. سوئیچ g- می‌توانید همه موارد را جایگزین کند.

sed 's/old_text/new_text/g' file.txt

جایگزینی پیشرفته و استفاده از گروه‌ها

استفاده از گروه‌ها در sed

    1. گروه بندی با پرانتز:
      • در sed، می‌توانید با استفاده از پرانتزهای \(…\) قسمت‌های خاصی از متن را گروه‌بندی کنید. این کار به شما اجازه می‌دهد تا آن‌ها را بعداً در متن جایگزین استفاده کنید.
      • / به عنوان تقسیم‌کننده برای تعیین قسمت‌های مختلف دستور جایگزینی است.
      • \ برای فرار دادن کاراکترهای خاص و گروه‌بندی استفاده می‌شود.

مثال: فرض کنید شماره تلفنی به این شکل دارید: ۱۲۳-۴۵۶-۷۸۹۰ و می‌خواهید این شماره را به شکل (۱۲۳) ۴۵۶-۷۸۹۰ تغییر دهید.

echo "123-456-7890" | sed 's/\([0-9]\{3\}\)-\([0-9]\{3\}\)-\([0-9]\{4\}\)/(\1) \2-\3/'

توضیح اجزای دستور

    • s/…/…/: این بخش برای جایگزینی است.
    • \([۰-۹]\{۳\}\): این نشان‌دهنده گروه اول است. این قسمت به معنی “سه عدد” است.
    • : این کاراکتر دقیقا یک خط تیره را جستجو می‌کند.
    • \([۰-۹]\{۳\}\): این قسمت دومین گروه را مشخص می‌کند (سه عدد بعد از خط تیره).
    • \([۰-۹]\{۴\}\): این قسمت سومین گروه را مشخص می‌کند (چهار عدد بعد از خط تیره دوم).

مقادیر جایگزینی

    • ۱\: به معنی مقدار گروه اول (یعنی ۱۲۳).
    • ۲\: به معنی مقدار گروه دوم (یعنی ۴۵۶).
    • ۳\: به معنی مقدار گروه سوم (یعنی ۷۸۹۰).

خروجی

    • نتیجه این دستور می‌شود: (۱۲۳) ۴۵۶-۷۸۹۰.

سوئیچ ^$: 

برای حذف خطوط خالی از یک فایل، ^$ یعنی خطی که هیچ چیزی بین شروع و پایان آن نیست.

sed '/^$/d' file.txt

حذف فاصله‌ها و تب‌های اضافی در انتهای خطوط

این دستور فاصله‌های اضافی را از انتهای خطوط حذف می‌کند:

sed 's/[ \t]*$//' file.txt

توضیحات اجزای دستور

      1. ‘/…/…/’s:
        این بخش به معنی جایگزینی است. به sed می‌گوید که چیزی را جستجو کند و آن را با چیزی دیگر جایگزین کند.
      2. [t\ ]:
        • [ ]: این نشانه به معنی یک مجموعه از کاراکترها است. یعنی می‌توانید یکی از کاراکترهای داخل براکت [ ] را مطابقت دهید.
        • (فاصله): اینجا به فاصله‌های معمولی اشاره دارد.
        • t\: این به معنی تب است. در بسیاری از زبان‌ها و ابزارها به عنوان کاراکتر فاصله عمودی شناخته می‌شود.
        • *: هرچی.
        • بنابراین *[ \t] به معنی هر تعداد فاصله یا تب است (از جمله هیچ‌کدام).
      3. $:
        • این نشانه به معنی پایان خط است.
        •  $*[t\ ] برای اینکه بررسی کنیم که آیا مجموعه کاراکترهای *[t\ ] در انتهای خط وجود دارد یا خیر.
      4. //:
        • بخش دوم دستور s، که بعد از / دوم قرار دارد، خالی است. یعنی می‌خواهیم کاراکترهایی را که جستجو کردیم (فاصله‌ها و تب‌ها) با هیچ‌چیز جایگزین کنیم، یعنی آن‌ها را حذف کنیم.

جابجایی کلمات در خط

با استفاده از گروه‌بندی، می‌توانیم جای دو کلمه را در خط تغییر دهیم:

'/echo "hello world" | sed 's/\(hello\) \(world\)/\2 \1

توضیحات اجزای دستور:

      1. echo:
      • برای چاپ متن و ارسال آن متن به عنوان ورودی دستور sed.
      1. /…/…/s:
        • این بخش به معنی جایگزینی است. با این دستور به sed می‌گوییم که یک الگو را جستجو کند و آن را با یک الگوی دیگر جایگزین کند.
      2. \(…\):
        • این پرانتزها برای گروه‌بندی استفاده می‌شوند. به sed می‌گویند که قسمت‌های داخل پرانتز را به عنوان گروه‌های جداگانه ذخیره کند.
        • در اینجا، \(hello\) گروه اول و \(world\) گروه دوم است.
      3. الگوی جستجو:
        • ۱\: به معنی مقدار گروه اول، یعنی hello.
        • ۲\: به معنی مقدار گروه دوم، یعنی world.
      4. محتوای الگو:
        • در این دستور، \(hello\) \(world\) به دنبال این می‌گردد که آیا می‌تواند hello و world را در یک خط پیدا کند و آن‌ها را به ترتیب مشخص شده در دستور جایگزینی استفاده کند.
      5. جایگزینی:
      6. \۲ \۱: در اینجا، ما گروه دوم (world) را در ابتدا و سپس گروه اول (hello) را بعد از آن قرار می‌دهیم. بنابراین hello world به world hello تغییر می‌یابد.
ورودی: hello world
خروجی: world hello

نتیجه گیری:

دستور sed ابزاری قدرتمند و کارآمد برای ویرایش و پردازش متون در لینوکس و دیگر سیستم‌های یونیکسی است که امکانات گسترده‌ای برای کار با فایل‌های متنی در اختیار کاربران قرار می‌دهد. با یادگیری و استفاده از دستورات مختلف sed مانند جایگزینی، حذف، گروه‌بندی و درج متن، کاربران می‌توانند ویرایش‌های پیچیده و پرحجم را تنها با چند خط دستور انجام دهند و زمان خود را در کار با داده‌های متنی بهینه کنند.

چقدر این مطلب مفید بود؟

روی یک ستاره کلیک کنید تا به آن امتیاز دهید!

میانگین امتیاز ۰ / ۵. تعداد آرا: ۰

تا الان رای نیامده! اولین نفری باشید که به این پست امتیاز می دهید.