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

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

با استفاده از موارد مختلف، درک روش استفاده از sed می تواند به مدیران سیستم کمک کند تا سرورهای خصوصی مجازی خود (VPS) را به طور موثر مدیریت کنند.

این مقاله دستورات sed، دستورات و دستورات فرعی لینوکس را توضیح خواهد داد. همچنین نمونه های مختلف sed و موارد استفاده برای مدیریت VPS لینوکس را یاد خواهید گرفت.

sed Command Options

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

sed options 'script' file_name

برای تغییر رفتار دستورات sed، موارد زیر را اضافه کنید command-line گزینه ها:

  • -کمک – اطلاعات استفاده از فرمان را چاپ می کند.
  • – اشکال زدایی – ترمینال را قادر می سازد تا اجرای برنامه و ورودی را حاشیه نویسی کند.
  • -من – فایل اصلی را بازنویسی می کند.
  • -n – چاپ خودکار را غیرفعال می کند مگر اینکه کاربر از آن استفاده کند پ فرمان
  • -u – خروجی را به حداقل می رساند.
  • -پوکس – افزونه های POSIX sed را برای ساده کردن نوشتن اسکریپت های قابل حمل غیرفعال می کند.
  • -e – چندین دستور را برای اجرای متوالی مشخص می کند.
  • – فایل های ورودی را در حالت باینری باز می کند.
  • – طول خط بسته بندی مورد نظر را برای ل فرمان

را اسکریپت شامل دستور فرعی، الگوی جستجو، رشته جایگزین و پرچم است. این عناصر در آپاستروف ها کپسوله می شوند و با استفاده از یک جدا کننده، مانند یک اسلش، از هم جدا می شوند./بک اسلش (\، یا لوله (|).

بسته به اینکه ترتیب آنها ممکن است متفاوت باشد روی فرمان فرعی به عنوان مثال س یا جایگزین دستور جایگزین a می شود عبارت منظم الگوی با یک رشته دیگر در اینجا نحو است:

's/regex_pattern/new_pattern/flags'

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

  • g – جایگزین جهانی را اعمال می کند، نه فقط اولین اتفاق.
  • عدد – مشخص می کند که کدام شماره خطوط را تغییر دهید.
  • پ – خط جدید را پس از جایگزینی موفق الگو چاپ می کند.
  • من – مورد تعویض را حساس می کند.

نکته حرفه ای

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

چگونه sed را نصب کنیم؟

بسته ویرایشگر جریان لینوکس در اکثر توزیع‌ها از پیش نصب شده است. اگر سیستم شما این ابزار را ندارد، برای نصب آن مراحل زیر را دنبال کنید:

مهم! در این آموزش، VPS ما در حال اجرا است اوبونتو 20.04. اگر از توزیع یا نسخه دیگری استفاده می کنید، دستورات ممکن است متفاوت باشد.

  1. با استفاده از کلاینت SSH مانند PuTTY یا Terminal به VPS خود متصل شوید. هاستینگer کاربران می توانند از مرورگر terminal از طریق hPanel.
  2. اعتبار ورود ریشه خود را وارد کنید. در hPanel، آنها در منوی نمای کلی VPS قرار دارند برگه دسترسی SSH.
  3. با تایپ این دستور مخزن را به روز کنید:
sudo apt-get update
  1. را نصب کنید بسته sed با وارد کردن دستور زیر:
sudo apt-get install sed
  1. برای بررسی موفقیت آمیز بودن نصب، دستور زیر را اجرا کنید:
sed --version
ترمینال نسخه sed نصب شده فعلی را نشان می دهدترمینال نسخه sed نصب شده فعلی را نشان می دهد

نمونه های فرمان sed

در بخش‌های بعدی، 10 مثال دستور ویرایشگر جریان را ارائه خواهیم کرد تا به شما در درک عملکرد آن کمک کند.

مهم! تمام دستورات زیر فایل اصلی را تغییر نمی دهند. برای اعمال مستقیم تغییرات، آن را اضافه کنید -من گزینه.

استفاده از sed برای جستجو و جایگزینی یک رشته

دستور sed معمولاً برای جایگزینی متن استفاده می شود. این ابزار الگوی مشخص شده را در یک فایل جستجو می کند و آن را با رشته مورد نظر تغییر می دهد.

برای انجام این کار، از س دستور با رشته ای که می خواهید جایگزین کنید و جایگزین آن شود. در اینجا نحو است:

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

متغیرها را با مقدار واقعی تغییر دهید. به عنوان مثال، این دستور جایگزین کلمه می شود “تصاویر” با “عکس” در منظره.txt فایل:

sed 's/images/photos/' scenery.txt
خروجی ترمینال نشان می دهد که sed کلمه images را با عکس جایگزین کرده استخروجی ترمینال نشان می دهد که sed کلمه images را با عکس جایگزین کرده است

اگر رشته شما حاوی علامت اسلش است، از جداکننده دیگری مانند بک اسلش استفاده کنید (\) یا لوله (|).

استفاده از sed برای جایگزینی nامین وقوع یک الگو در یک خط

اگر یک الگو در یک خط چندین بار رخ داد، دستور زیر را وارد کنید تا یک الگوی خاص جایگزین شود:

sed 's/old_string/new_string/#' samplefile.txt

نماد هش (#) را با شماره دنباله الگو جایگزین کنید. به عنوان مثال، این دستور جایگزین اولین وقوع کلمه می شود “موسیقی” با “ترانه” در یک خط در داخل playlist.txt فایل:

sed 's/music/song/1' playlist.txt
خروجی ترمینال نشان می دهد که sed اولین موسیقی را با آهنگ جایگزین کرده استخروجی ترمینال نشان می دهد که sed اولین موسیقی را با آهنگ جایگزین کرده است

استفاده از sed برای جایگزینی همه رخدادهای الگو در یک خط

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

sed 's/old_string/new_string/g' samplefile.txt

به عنوان مثال، موارد زیر را برای جایگزینی تمام رخدادهایی که حاوی هستند اجرا کنید “عقاب” با “شاهین” در یک خط در داخل animals.txt:

sed 's/eagle/falcon/g' animals.txt
خروجی ترمینال نشان می دهد که sed تمام رخدادهای عقاب را با شاهین جایگزین کرده استخروجی ترمینال نشان می دهد که sed تمام رخدادهای عقاب را با شاهین جایگزین کرده است

استفاده از sed برای جایگزینی یک رخداد از n ام به همه موارد در یک خط

به جای جایگزینی همه الگوها در یک خط، تعداد و g پرچم برای جایگزینی رخدادهایی که از یک مورد خاص شروع می شود. این هم اسکریپت sed:

sed 's/old_string/new_string/#g' samplefile.txt

برای مثال دستور زیر جایگزین کلمه می شود “ماهی ها” با “آکواریوس” از وقوع دوم تا آخرین مورد در astrology.txt فایل.

sed 's/pisces/aquarius/2g' astrology.txt
خروجی ترمینال نشان می‌دهد که sed تا آخرین مورد با آکواریوس جایگزین وقوع ماهی دوم شده است.خروجی ترمینال نشان می‌دهد که sed تا آخرین مورد با آکواریوس جایگزین وقوع ماهی دوم شده است.

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

برای چاپ اولین کاراکتر هر کلمه داخل پرانتز، از اسکریپت زیر استفاده کنید:

echo "desired_sentence" | sed -E 's/(\b\w)/(\1)/g'

برای مثال برای نمایش اولین کاراکتر از “نمونه ای از دستور sed” در پرانتز وارد کنید:

echo "An example of the sed command" | sed -E 's/(\b\w)/(\1)/g'
Sed اولین کاراکتر هر کلمه از جمله لوله شده را پرانتز می کندSed اولین کاراکتر هر کلمه از جمله لوله شده را پرانتز می کند

برای پرانتز کردن اولین کاراکتر هر کلمه از یک فایل، عبارت را حذف کنید اکو دستور دهید و در پایان سند ورودی را اضافه کنید.

پیشنهاد می‌کنیم بخوانید:  روش استفاده از Linux Time Command: همه آنچه که باید بدانید

استفاده از sed برای جایگزینی رشته روی یک شماره خط خاص

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

sed '#s/old_string/new_string/' samplefile.txt

برای مثال عبارت زیر را به جای کلمه وارد کنید “کیک” با “نان” در خط دوم از foods.txt:

sed '2s/cake/bread/' foods.txt
خروجی ترمینال نشان می دهد که sed در خط دوم کیک را با نان جایگزین کرده استخروجی ترمینال نشان می دهد که sed در خط دوم کیک را با نان جایگزین کرده است

استفاده از sed برای کپی کردن خط جایگزین شده با پرچم /p

برای چاپ خطوطی که دستور sed شما به عنوان یک خروجی اضافی تغییر داده است، از پ یا چاپ پرچم. در اینجا نحو کلی آمده است:

sed 's/old_string/new_string/p' samplefile.txt

به عنوان مثال برای جایگزینی موارد زیر را اجرا کنید “تلفن ها” با “قرص” در gadgets.txt فایل و پرینت نتایج:

sed 's/phones/tablets/p' gadgets.txt
ترمینال خط جایگزین شده را به عنوان یک خروجی اضافی چاپ می کندترمینال خط جایگزین شده را به عنوان یک خروجی اضافی چاپ می کند

اگر خط حاوی الگوی جستجو نباشد و جایگزین نشود، ترمینال رشته اصلی را چاپ می کند.

استفاده از sed برای جایگزینی رشته طیفی از خطوط

دستور sed به شما این امکان را می دهد که فقط شماره خطوط مشخص شده در اسکریپت را با اضافه کردن محدوده تغییر دهید. در اینجا نحو است:

sed '#,# s/old_string/new_string/' samplefile.txt

برای مثال دستور زیر جایگزین می شود “آلمان” واقع در خط سوم، چهارم و پنجم روی را country.txt فایل با “فرانسه”:

sed '3,5 s/germany/france/' countries.txt
خروجی ترمینال نشان می دهد sed جایگزین آلمان شده است on خط سوم تا پنجم با فرانسهخروجی ترمینال نشان می دهد sed جایگزین آلمان شده است on خط سوم تا پنجم با فرانسه

استفاده از sed برای چاپ فقط خطوط جایگزین شده

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

sed -n 's/old_string/new_string/p' samplefile.txt

به عنوان مثال، برای جایگزینی نمونه سوم از “سبز” با “آبی در یک خط در داخل colors.txt خطوط اصلاح شده را فایل و چاپ کنید روی را terminal پنجره، وارد کنید:

sed -n 's/green/blue/3p' colors.txt
ترمینال یک خط واحد را چاپ می کند که sed اصلاح شده استترمینال یک خط واحد را چاپ می کند که sed اصلاح شده است

استفاده از sed برای حذف خطوط از یک فایل خاص

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

sed '#d' samplefile.txt

نماد هش (#) را با شماره خطی که می خواهید حذف کنید جایگزین کنید. به عنوان مثال، این دستور را اجرا کنید تا اولین خط از صفحه حذف شود citys.txt فایل:

sed '1d' cities.txt

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

sed '#,#d' samplefile.txt

نمادهای هش (#) را با شماره خط شروع و پایان جایگزین کنید. به عنوان مثال، برای حذف خط اول تا سوم در عبارت زیر را وارد کنید cars.txt فایل:

sed '1,3d' cars.txt

همچنین می توانید آخرین خط یک فایل را با ترکیب کردن حذف کنید د دستور فرعی و علامت دلار ($)، مانند زیر.

sed '$d' samplefile.txt

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

sed '#,$d' samplefile.txt

به عنوان مثال، این دستور خط دوم تا آخرین خط را حذف می کند books.txt فایل:

sed '2,$d' books.txt

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

sed '/pattern/d' samplefile.txt

برای مثال، این را اجرا کنید تا حذف شود “اوابو” الگوی از filestrings.txt فایل:

sed '/oabo/d' filestrings.txt

موارد استفاده از فرمان sed

در این قسمت روش استفاده از دستورات sed برای موارد استفاده مختلف در مدیریت سرور را توضیح خواهیم داد.

استفاده از sed برای پردازش دسته ای فایل ها

به طور کلی، دو راه برای ویرایش فایل ها به صورت انبوه با استفاده از دستور sed وجود دارد.

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

sed 's/old_string/new_string/g' filename1.txt filename2.txt

دستور به طور همزمان همه را پیدا و جایگزین می کند رشته_قدیمی موارد در دو فایل متنی

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

find /directory/path/file -type f -exec sed -i 's/old_string/new_string/g' {} \;

جایگزین کردن /directory/path/file با دایرکتوری حاوی فایل هایی که می خواهید process.

پیشنهاد می‌کنیم بخوانید:  روش لغو تغییرات در وردپرس – بازبینی ها و پشتیبان گیری

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

از sed to استفاده کنید تجزیه و تحلیل فایل لاگ

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

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

sed -n 's/pattern/p' logfile.log > extracted_data.txt

الگوی regex را با توجه به داده‌هایی که می‌خواهید جستجو کنید، مانند آدرس IP، پیام خطا یا مهر زمانی، تغییر دهید. به عنوان مثال، از این اسکریپت برای صادر کردن خطاهای ثبت شده استفاده کنید:

sed -n 's/Error: \(.*\)/\1/p' logfile.log > error_logs.txt

از sed برای دستکاری تگ HTML/XML استفاده کنید

دستور sed در لینوکس به شما امکان می دهد رشته ها را به راحتی در کد جایگزین کنید. برای مثال، می‌توانید برچسب‌های خاص HTML یا XML را جستجو کنید و با استفاده از آن، ویژگی‌های آن‌ها را جایگزین کنید جایگزینی فرمان در اینجا نحو است:

sed 's/<tag attribute="old_pattern">/<tag attribute="new_pattern"/' file.html

دستور بسته به آن متفاوت است روی برچسب ها و ویژگی هایی که می خواهید تغییر دهید. به عنوان مثال، این دستور sed همه تگ های عنوان را تغییر می دهد. رنگ صفات به سیاه:

sed 's/\(<h[1-6].*color:\) [^;]*/\1 black/g' webpage.html

دستور الگوی کد HTML زیر را جستجو می کند و مقدار رنگ را با رشته جدید جایگزین می کند:

<h1 style="color: value;">Heading 1</h1>

از sed برای فایل های خارجی استفاده کنید

عملیات پیچیده دستور sed ممکن است حاوی چندین اسکریپت باشد. در حالی که می توانید آنها را در یک دستور با استفاده از -e گزینه، نوشتن آن دشوار است و مستعد خطا است.

از طرف دیگر، یک خارجی ایجاد کنید SED فایل حاوی چندین اسکریپت این مرحله است:

  1. را اجرا کنید نانو دستور ایجاد یک فایل اسکریپت جدید و باز کردن ویرایشگر متن. جایگزین کردن اسکریپت با نام فایل مورد نظر شما:
nano script.sed
  1. اسکریپت های خود را بنویسید و مطمئن شوید که هر خط دارای یک اسکریپت بدون آپستروف است، مانند موارد زیر:
s/old_pattern1/new_pattern1/g
/old_pattern2/d
  1. مطبوعات Ctrl+X و Y برای بستن ویرایشگر و ذخیره فایل.
  2. اسکریپت ها را با اضافه کردن فایل با استفاده از گزینه در دستور شما در اینجا نحو به نظر می رسد:
sed -f script.sed destination_file.txt

از sed برای BackReferences در Regex استفاده کنید

مراجع برگشتی به شما اجازه می دهد به الگوهای مطابق قبلی مراجعه کنید و از آنها در رشته جدید استفاده مجدد کنید. نیاز به بازنویسی الگوی regex را از بین می برد و اسکریپت را ساده می کند.

الگوی مورد استفاده به عنوان مرجع دستور sed a نامیده می شود گروه گرفتن. در داخل پرانتز محصور شده است، همچنین برای عبارات منظم گسترش یافته اسلید می شود.

برای مراجعه به گروه عکسبرداری، از علامت بک اسلش (\) و عددی که ترتیب الگو را نشان می دهد استفاده کنید. به عنوان مثال، \1 ارجاع به عقب از اولین الگوی regex گرفته شده مجددا استفاده می کند.

مراجع برگشتی برای جایگزینی و ترتیب مجدد الگوها مفید هستند. به عنوان مثال، این دستور sed از آنها برای مرتب کردن نام خانوادگی و کوچک استفاده می کند:

echo "Doe, John" | sed 's/\(.*\), \(.*\)/\2 \1/'

این دو \(.*\) الگوهای regex Doe و John را می گیرند و آنها را به عنوان مرجع قرار می دهند. از آنجایی که رشته جدید با مرجع دوم شروع می شود، مقدار جدید خواهد بود جان دو.

Sed رشته‌ها را با ارجاع‌های برگشتی دوباره ترتیب می‌دهدSed رشته‌ها را با ارجاع‌های برگشتی دوباره ترتیب می‌دهد

نتیجه

ویرایشگر جریان یا دستور sed در لینوکس ابزاری است که به شما امکان می‌دهد الگوی یک فایل را با استفاده از عبارات منظم پیدا و تغییر دهید. سینتکس آن شامل دستور sed، گزینه ها، اسکریپت و فایل هدف است.

sed command-line گزینه ها رفتار ابزار را تغییر می دهند، در حالی که اسکریپت تعیین می کند که چگونه ابزار الگوی regex منطبق را تغییر می دهد. این اسکریپت شامل یک فرمان فرعی، پرچم ها و الگوهای regex است که هر کدام با استفاده از یک جداکننده مانند یک اسلش (/) از هم جدا شده اند.

برای استفاده از دستور sed در لینوکس، باز کنید command-line برنامه هایی مانند ترمینال، کلاینت SSH یا هاستینگerترمینال مرورگر. برای پیدا کردن و جایگزین کردن یک الگو، از س فرمان فرعی در همین حال، د دستور فرعی خطوط یا رشته ها را حذف می کند.

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

سؤالات متداول در لینوکس sed Command

این بخش به سوالات متداول در مورد دستور sed پاسخ می دهد.

sed چه تفاوتی با grep دارد؟

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

sed چگونه در اسکریپت Bash استفاده می شود؟

در اسکریپت Bash، دستور sed سه کاربرد اصلی دارد: چاپ کردن در stdout، حذف یک متن، و جایگزینی یک رشته خاص. برنامه تعیین می کند که کدام خط را انتخاب کند process از محدوده آدرس مشخص شده

چگونه می توان یک متغیر را در دستور sed فراخوانی کرد؟

متغیر کاراکتری است که ما به آن مقداری اختصاص می‌دهیم و زمانی که به دستور sed اضافه می‌شود خوانایی بهتری ارائه می‌دهد. این می تواند یک عدد، کاراکتر، نام فایل یا دستگاه باشد. پوسته متغیرها را گسترش می دهد. برای مثال، اگر رشته حاوی یک اسلش باشد (/، از جداکننده دیگری مانند لوله (|).

تفاوت دستور sed با دستور awk چیست؟

دستور sed برای تغییرات اساسی متن است، مانند جایگزینی، حذف و درج یک الگو در یک فایل ورودی. در همین حال، awk برای کارهای پیچیده مانند استخراج داده ها، دستکاری متن و محاسبات ریاضی استفاده می شود. همچنین از دستورات برنامه نویسی مانند اگر دیگری و انجام در حالی که.