شما برای مطالعه این مقاله فقط 6 دقیقه وقت نیاز دارید

sed-command-in-linux
دسته بندی : آموزش لینوکس

دستور sed در لینوکس: آموزش ویرایش فایل با مثال های کاربردی

5/5 - (1 امتیاز)

stream editor با مخفف sed یکی از ویرایشگرهای متنی معروف لینوکس است که به شما امکان می دهد متن ها را به صورت خطی پردازش کرده و تغییرات مختلفی مثل جایگزینی، درج، حذف، ویرایش و … را روی آن اعمال کنید. 

دستور sed در اکثر توزیع های لینوکس در دسترس است و آپشن ها و گزینه های مختلفی را برای مدیریت و ویرایش کارآمدتر فایل های متنی ارائه داده است.

کاربردهای دستور sed لینوکس

  • انتخاب متن
  • جستجوی عبارت موردنظر در متن
  • ویرایش فایل
  • جایگزین کردن متن کلمات موردنظر به کلمات دیگر
  • انتخاب قسمت های موردنظر از یک فایل بر اساس الگوی regex
  • اضافه کردن خطوط جدید به متن
  • حذف خطوط از متن

پیش نیازهای استفاده از sed در لینوکس

  • سیستم یا سرور مجهز به لینوکس
  • دسترسی به ترمینال 
  • داشتن مجوز ویرایش فایل متنی موردنظر
  • نصب بودن دستور sed

دستور sed به طور پیش فرض در اکثر توزیع های لینوکس نصب است ولی اگر بعد از اجرای دستور sed –version متوجه شدید که این دستور در سیستم شما نصب نیست، ابتدا باید دستور نصب sed در لینوکس را اجرا کنید:

دستور نصب sed در توزیع های مبتنی بر دبیان مثل اوبونتو

sudo apt install sed

دستور نصب sed در توزیع های مبتنی بر ردهت مثل CentOS و فدورا

sudo yum install sed

یا

sudo dnf install sed

دستور نصب sed در آرچ لینوکس 

sudo pacman -S sed

دستور نصب sed در OpenSUSE

sudo zypper install sed

بعد از اینکه دستور نصب با موفقیت اجرا شد، با استفاده از دستور زیر می توانید از نصب موفقیت آمیز آن مطمئن شوید:

sed --version

در صورت نیاز به یک سرور لینوکس حرفه ای و مجهز برای استفاده از انواع دستورات و امکانات موجود در دنیای لینوکس، می توانید به صفحه خرید سرور مجازی لینوکس مراجعه کنید و پلن ایده آل خود را سفارش دهید.

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

سینتکس پایه دستور sed به صورت زیر است:

sed Options Script Files

Options تعیین کننده رفتار دستور sed هستند که در ادامه با چند مورد از مهم ترین آنها آشنا خواهید شد.

Script بخش مربوط به الگویی است که می خواهید تغییر را بر اساس آن اعمال کنید.

Files همان فایل یا فایل های متنی هستند که می خواهید از طریق دستور sed با آنها کار کنید.

آپشن های دستور sed

 

آپشنکاربرد
a-اضافه کردن خط جدید
b-باز کردن فایل ها در حالت باینری
debug–سویچ به حالت دیباگ
f-اضافه کردن محتوای اسکریپت موردنظر برای اجرا شدن با دستورات
s-تفکیک محتوای فایل های مشخص شده
E- یا r-استفاده از عبارات منظم توسعه یافه
u-به حداقل رساندن بافرهای ورودی و خروجی
i-اعمال ویرایش ها به صورت درجا با بازنویسی فایل اصلی 
z-نمایش ورودی به صورت مجموعه ای از خطوط
sandbox–غیرفعال سازی برنامه های خارجی و کار کردن روی فایل متنی
n-غیرفعال سازی چاپ خروجی
follow-symlinks–ویرایش فایل در صورت داشتن لینک نمادین (به صورت ترکیبی با آپشن i)

در صورت تمایل به کسب اطلاعات بیشتر در مورد آپشن های دستور sed می توانید از دو دستور زیر کمک بگیرید:

man sed 

sed -h

مثال های کاربردی از دستور sed در لینوکس

با بررسی مثال های زیر می توانید درک بهتری از نحوه کار با این ویرایشگر داشته باشید:

انتخاب بخش خاصی از فایل موردنظر

اگر می خواهید یک قسمت خاص از متن موردنظر را اکسترکت کنید و در خروجی ببینید، کافیست به صورت زیر از آپشن n و فلگ p استفاده کنید:

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

این دستور، رفتار پیش فرض یعنی چاپ خودکار تمام خطوط فایل متنی را غیرفعال می کند و فقط خطوط شماره ۱ تا ۴ را چاپ می کند.

برای اینکه چند بخش را با یک دستور انتخاب کنید و در خروجی ببینید، می توانید از آپشن e استفاده کنید:

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

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

یا اگر می خواهید الگوی چاپ “چند خط در میان” را وارد عمل کنید، می توانید از کاراکتر ~ استفاده کنید. به عنوان مثال، دستور زیر خطوط را به صورت یک در میان (خطوط ۱، ۳، ۵، ۷ و …) چاپ می کند.

sed -n '1~2p' file.txt

شاید چاپ خطوط با استفاده از شماره های موردنظر برایتان زیاد کارساز نباشد و نیاز به این داشته باشید که خطوطی که با یک کلمه خاص شروع می شوند را چاپ کنید.

علامت ^ نشاندهنده شروع خط است، پس اگر بیایید الگوی And/^ را وارد عمل کنید، فقط خطوطی را در خروجی می بینید که با حرف And شروع می شوند:

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

اضافه کردن خط جدید به فایل متنی

وقتی صحبت از ویرایشگرهای متنی می شود، امکان ندارد که نحوه اضافه کردن خط جدید را نادیده بگیریم

برای اینکه خط جدید را به فایل متنی اضافه کنید، باید از آپشن a یا i کمک بگیرید.

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

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/a\This is a new line' file.txt
  • اضافه کردن خط جدید به خط قبل از خطوط حاوی الگوی موردنظر
sed '/pattern/i\This is a new line' file.txt

مثال زیر یک نمونه ساده از عملیات درج خط توسط الگو است:

sed '/Linux/a\This is a new line' filename.txt

این دستور، بعد از هر خطی که شامل linux است، یک خط جدید با محتویات This is a new line اضافه می کند.

کلیک کنید  خطای اتصال به سرور مجازی؛ حل وصل نشدن به vps لینوکس و ویندوز

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

اگر می خواهید در فایل filename.txt عبارت old_string را با عبارت new_string جایگزین کنید، باید دستور sed را به صورت زیر اجرا کنید:

sed 's/old_string/new_string/' filename.txt

به عنوان مثال برای جایگزین کردن کلمه Unix با Linux در فایل file.txt باید دستور زیر را اجرا کنید:

sed 's/Unix/Linux/' file.txt

اگر در یک خط چند Unix داشته باشید، دستور بالا فقط Unix اول را به Linux تبدیل می کند. 

برای مقابله با این مسئله می توانید فلگ g را هم به انتهای Script اضافه کنید. 

sed 's/Unix/Linux/g' file.txt

این دستور تمام Unix های موجود در فایل متنی را به Linux تبدیل می کند.

اگر می خواهید الگوی جایگزینی را برای nامین مورد موجود در فایل متنی اعمال کنید، می توانید شماره n را به دستور اضافه کنید:

sed 's/Unix/Linux/2' file.txt

دستور بالا، فقط دومین Unix را به Linux تبدیل می کند.

در صورت تمایل به مشاهده تمام خطوط تغییر یافته توسط الگوی درج شده در اسکریپت می توانید از آپشن n و فلگ p استفاده کنید:

sed -n 's/Unix/Linux/p' file.txt

اگر خط خاصی را مدنظر دارید و می خواهید عملیات جایگزینی را فقط روی نمونه های موجود در آن خط لحاظ کنید، می توانید شماره خط (مثلاً 4) را به صورت زیر در دستور sed لحاظ کنید:

sed '4 s/Unix/Linux/p' file.txt

حتی اگر دوست دارید این الگوی جایگزینی را برای محدوده خاصی از خطوط لحاظ کنید، می توانید دستور sed در لینوکس را به صورت زیر اجرا کنید:

sed '1,3 s/Unix/Linux/p' file.txt

این دستور فقط Unixهای موجود در خطوط ۱ تا ۳ را با Linux جایگزین می کند.

اگر محدوده موردنظر شما از یک خط خاص تا آخر است، می توانید آن را با استفاده از علامت $ مشخص کنید.

به عنوان مثال، خط دوم تا آخر به صورت زیر در دستور جایگزینی sed لحاظ می شود:

sed '2,$ s/Unix/Linux/p' file.txt

اگر می خواهید چند جایگزینی را به صورت همزمان در یک دستور لحاظ کرده و وارد عمل کنید، دو راه دارید:

  • از آپشن e استفاده کنید:
sed -n -e  's/Unix/Linux' -e 's/DebianUbuntu'
  • از ; استفاده کنید:
sed -n 's/Unix/Linux;s/DebianUbuntu'

یک مدل دیگر از جایگزینی وجود دارد که کمی پیچیده تر است.

به این صورت که این بار به جای یک کلمه یا عبارت، از الگو استفاده می شود.

به عنوان مثال، دستور زیر که شامل الگو است:

sed 's/\([^:]*\).*/\1/' /etc/passwd

: را به عنوان معیار سنجش در نظر می گیرد و عبارت قبل از : که در فایل /etc/passwd نشاندهنده UID است را نگه می دارد و عبارت بعد از آن که GID را از فایل حذف می کند.

حذف خطوط موردنظر از فایل متنی

برای اینکه خط موردنظر را با دستور sed از فایل متنی حذف کنید، نیازی نیست فایل را باز کنید و خط را از آن حذف کنید.

کافیست شماره خط موردنظر را همراه آپشن d در دستور لحاظ کنید:

sed '5d' file.txt

اگر می خواهید خط آخر را حذف کنید، باید از علامت $ استفاده کنید:

sed '$d' file.txt

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

sed '3,6d' file.txt

برای حذف nامین تا آخرین خط  فایل متنی موردنظر هم کافیست، دستور sed را به صورت زیر اجرا کنید:

sed '12,$d' file.txt

و در آخر، اگر الگوی خاصی را برای حذف خطوط در نظر دارید و می خواهید خطوطی که با این الگو مطابقت دارند حذف شوند، می توانید دستور sed را به صورت زیر اجرا کنید:

sed '/pattern/d' file.txt

به عنوان مثال، دستور زیر به دنبال خطوطی می گردد که شامل رشته abc است و سپس آن را از فایل متنی حذف می کند:

sed '/abc/d' file.txt

سخن آخر

دستور sed در لینوکس یک ویرایشگر متن جریانی است که تمام عملیات ویرایشی مثل جایگزینی و حذف خطوط را با سرعت و دقت بسیار بالاتری انجام می دهد. البته nano و vim از ویرایشگر های دیگری هستند که می توانید برای ادیت فایل های متنی خود از آنها نیز استفاده کنید.

مطالب مشابهی که شاید علاقمند باشید

من زهرا پیرجانی دانشجوی رشته نرم افزار هستم. علاقه ای که به یادگیری مطالب جدید دارم باعث شد که انگیزم برای فعالیت در حوزه تولیدمحتوا بیشتر شود. تمام تلاشم این است که با درک کامل موضوع، محتوایی ساده و کامل تهیه کنم که برای همه علاقمندان مفید و کاربردی باشد. یادگیری مطالب جدید و آموزش اونها به بقیه، بهترین کاری هست که می توانم برای رشد خودم و همچنین کمک به رشد علاقمندان به مباحث مورنظر انجام بدم.

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید