آموزش جامع دستور sed در لینوکس
راهنمای کامل و کاربردی برای پردازش متن
ویژه انتشار در وبسایت دیدگاه
مقدمه
دستور sed که مخفف Stream Editor است، یکی از قدرتمندترین ابزارهای خط فرمان لینوکس برای پردازش و ویرایش متن محسوب میشود. این ابزار به شما امکان میدهد عملیاتهایی مانند جستجو، جایگزینی، حذف، درج و فیلتر کردن متن را بدون باز کردن فایل در ویرایشگرهای متنی انجام دهید.
در این راهنمای جامع از دیدگاه، دستور sed را از مفاهیم پایه تا سناریوهای پیشرفته بررسی میکنیم و با مثالهای عملی، کاربردهای واقعی آن را توضیح میدهیم. این آموزش برای مدیران سرور، برنامهنویسان و کاربران حرفهای لینوکس تهیه شده است.
sed چیست و چگونه کار میکند؟
sed یک ویرایشگر جریانی است که متن را خطبهخط پردازش میکند. این ویژگی باعث میشود بتوان تغییرات موردنظر را روی فایلها یا دادههای ورودی اعمال کرد، بدون آنکه فایل مستقیما باز یا ویرایش شود.
به همین دلیل sed یکی از ابزارهای اصلی در اسکریپتهای شل و وظایف خودکار مدیریت سیستم است.
ویژگیهای کلیدی sed
-
جستجو و جایگزینی الگوها
-
ویرایش مستقیم فایلها (In-place Editing)
-
فیلتر و حذف خطوط خاص
-
پشتیبانی کامل از Regular Expression
-
پردازش چندخطی و پیشرفته
ساختار کلی دستور sed
ساختار پایه دستور sed به شکل زیر است:
sed [options] 'script' fileاجزای این دستور شامل موارد زیر هستند:
Options (گزینهها)
برای تعیین نحوه اجرای دستور استفاده میشوند. به عنوان مثال:
-i
-n
Script
دستور یا دستورات ویرایشی که مشخص میکنند sed چه عملی انجام دهد. این بخش داخل کوتیشن نوشته میشود و میتواند شامل چندین دستور باشد.
File
فایل ورودی که عملیات روی آن انجام میشود. در صورت عدم تعیین فایل، sed ورودی را از standard input دریافت میکند.
مثال ساده جایگزینی متن
sed 's/hello/world/' sample.txtاین دستور اولین occurrence کلمه
helloworld
گزینههای پرکاربرد sed
| گزینه | توضیح |
|---|---|
-i-n-e-f-r-E-z-bسناریوهای رایج استفاده از sed
برای مثال، فایل زیر را در نظر بگیرید:
file1.txtمحتوا:
Linux is a family of free and open-source operating systems based on the Linux kernel.
Operating systems based on Linux are known as Linux distributions or distros.
Examples include Debian, Ubuntu, Fedora, CentOS, Gentoo, Arch Linux, and many others.جستجو و جایگزینی
sed 's/Linux/Unix/' file1.txtبهصورت پیشفرض، فقط اولین تطبیق در هر خط جایگزین میشود.
جایگزینی سراسری در هر خط
sed 's/Linux/Unix/g' file1.txtتمام occurrenceها در هر خط جایگزین میشوند.
ویرایش مستقیم فایل
sed -i 's/Linux/Unix/' file1.txtاین دستور فایل را مستقیما تغییر میدهد. بدون
-i
حذف یک خط مشخص
sed '2d' file1.txtخط دوم فایل حذف میشود.
چاپ خطوط خاص
sed -n '1,2p' file1.txtفقط خطوط ۱ و ۲ چاپ میشوند.
حذف خطوط دارای یک الگو
sed '/kernel/d' file1.txtتمام خطوطی که شامل کلمه
kernel
ایجاد فایل پشتیبان هنگام ویرایش
sed -i.bak 's/Unix/Linux/g' file1.txtقبل از اعمال تغییر، نسخه پشتیبان با پسوند
.bak
جایگزینی Tab با Space
sed 's/\t/ /g' file1.txtتمام tabها با چهار فاصله جایگزین میشوند.
حذف خطوط خالی
sed '/^$/d' file1.txtچاپ خطوط منطبق با الگو
sed -n '/Ubuntu/p' file1.txtکاربردهای پیشرفته sed
درج متن قبل از یک خط
sed -i '2i\This is inserted text.' file1.txtجایگزینی nth occurrence
sed 's/Linux/Unix/2' file1.txtدومین occurrence جایگزین میشود.
افزودن متن بعد از یک خط
sed -i '3a\This is appended text.' file1.txtجایگزینی در ابتدای خط
sed 's/^Linux/Unix/' file1.txtجایگزینی در انتهای خط
sed 's/distros.$/distributions/' file1.txtجایگزینی بدون حساسیت به حروف بزرگ و کوچک
sed 's/linux/Unix/I' file1.txtاستخراج بازهای از خطوط بین دو الگو
sed -n '/inserted/,/appended/p' file1.txtپردازش همزمان چند فایل
sed -i 's/Linux/Unix/' file1.txt file2.txtشمارهگذاری خطوط غیرخالی
sed '/./=' file1.txt | sed 'N;s/\n/ /'جایگزینی در یک خط خاص
sed '3 s/distros/distributions/' file1.txtجایگزینی در بازهای از خطوط
sed '1,3 s/Linux/Unix/' file1.txtنکات بهینهسازی عملکرد در فایلهای حجیم
-
استفاده از
-n
ترکیب چند دستور در یک اسکریپت sed
استفاده از pipe بهجای فایل موقت
پرهیز از ویرایش مستقیم فایلهای بسیار بزرگ
بررسی ابزارهای جایگزین مانند awk یا perl در سناریوهای سنگین
استفاده از sed در اسکریپتهای شل
#!/bin/bash
sed 's/foo/bar/g' input.txt > output.txtمقایسه sed با awk و perl
استفاده از sed
-
جایگزینی و حذف سریع
-
عملیات ساده خطمحور
-
اسکریپتهای سبک
استفاده از awk
-
دادههای ساختیافته (CSV، TSV)
-
محاسبات عددی
-
گزارشگیری
استفاده از perl
-
regexهای پیچیده
-
منطق شرطی
-
پردازش سنگین متن
جمعبندی
sed یکی از ابزارهای حیاتی خط فرمان لینوکس است که یادگیری آن، توانایی شما در پردازش و مدیریت فایلهای متنی را بهطور چشمگیری افزایش میدهد. ترکیب قدرت sed با اسکریپتهای شل، امکان خودکارسازی بسیاری از وظایف مدیریتی را فراهم میکند.
برای تسلط بیشتر بر ابزارهای خط فرمان لینوکس، پیشنهاد میکنیم راهنمای دانلود فایلها با cURL و انتقال امن فایل با SFTP را نیز مطالعه کنید.
این آموزش توسط دیدگاه برای استفاده عملی مدیران سیستم و کاربران حرفهای لینوکس تهیه شده است.
پرسشهای متداول (FAQ)
sed چیست؟
ابزاری برای پردازش و ویرایش متن بهصورت خطبهخط در لینوکس.
چه زمانی از sed استفاده کنیم؟
برای جایگزینی، حذف، درج و پردازش سریع متن بدون باز کردن فایل.
حذف خطوط خالی با sed چگونه انجام میشود؟
sed '/^$/d' file.txt