حذف یکنواختی: اتوماسیون با sed.

معرفی
Sed، مخفف «ویرایشگر جریان» مدتی است که وجود داشته و معمولاً برای جایگزینی مقادیر رشتهای خاص در یک فایل با فایل دیگری استفاده میشود.
خوب، به نظر مستقیم می رسد، چرا از تابع جایگزین موجود در ویرایشگرهای متن استفاده نکنید؟
البته، شما می توانید، اما خودکار کردن این کار ساده، آن را بسیار کارآمدتر می کند، به خصوص در مواردی که نیاز به به روز رسانی دسته ای از فایل ها دارید.
شما خواهید دید که چگونه، تنها در یک کمی. بیایید ابتدا شما را با نحو آشنا کنیم.
نحو
نحو بسیار ابتدایی است:
• sed 's/pattern/replacement/g' <filename>
دستور بالا جایگزین می شود pattern
با replacement
که در
فایل و خروجی را در کنسول چاپ می کند.
نامه s
مخفف جایگزین است.
نامه g
مخفف جهانی است.
این /
یک جداکننده است که به عنوان جداکننده میدان استفاده می شود.
سینتکس بالا بیشتر برای مشاهده خروجی استفاده می شود
دستور sed قبل از اجرای آن
• sed -i 's/pattern/replacement/g' <filename>
این -i
گزینه به sed می گوید که فایل را در جای خود به روز کند. شما
می توانید سایر گزینه های موجود با استفاده از sed را بررسی کنید sed -
.
-help
نکته
اگر شما pattern
یا replacement
شامل /
مانند یک URL، ممکن است خروجی یا خطاهای ناخواسته نیز وجود داشته باشد.
برای جلوگیری از آن، می توانید به سادگی استفاده کنید \\
قبل از /
. این درمان می کند /
به عنوان یک شخصیت معمولی و نه یک مرز.
نکته حرفه ای
شما می توانید از هر کاراکتر دیگری به عنوان جداکننده استفاده کنید تا زمانی که در الگو یا جایگزین ظاهر نشود.
مثلا:sed -i 's|pattern|replacement|g' <filename>
، کاملاً خوب کار می کند.
استفاده پیشرفته: ضبط گروه ها در sed
گروههای ضبط برای تعریف بخشهایی از یک عبارت منظم (Regex) استفاده میشوند که میتوانند برای استفاده بعدی ضبط و ذخیره شوند.
اگر با Regex آشنا نیستید، نگران نباشید، من به مثال استفاده شده در اینجا می پردازم. در اینجا شما میتوانید اطلاعات بیشتری راجع به آن بخوانید
گروه های ضبط با استفاده از پرانتز () تعریف می شوند که متن/الگوی مورد نظر را در بر می گیرد.
بیایید یک سناریوی ساده را در زیر ببینیم:
بگویید من یک فایل sample.txt با داده های زیر دارم:
name: James Bond
اکنون باید آن را مطابق شکل زیر به روز کنم:
The name is Bond, James Bond.
می توان با استفاده از دستور sed در ترکیب با Regex به حالت دلخواه رسید:
sed -i 's/\(.*\): \(.*\)/The \1 is Bond, \2./g' sample.txt
مقایسه با نحو استاندارد:
sed -i 's/pattern/replacement/g' <filename>
• الگوی = (.): (.)
\(.*):
تمام داده های موجود قبل را جمع آوری می کند :
و آن را به نقشه می کشد \1
، (یعنی \1=”نام”.)
\(.*\)
تمام داده های موجود پس از آن را جمع آوری می کند :
و آن را به نقشه می کشد \2
، (یعنی \2=”جیمز باند”.)
• جایگزینی = The \1
باند است، \2
.
نتیجه
• دستور Sed است سبک وزن و کارآمد.
• این است سازگاری با Regex دستکاری متن پیچیده را با لیمو ترش می کند.
• این گزینه را فراهم می کند ویرایش در محل به جای ایجاد یک کپی جدید
• ادغام آسان با اسکریپت های اتوماسیون، از بین بردن یکنواختی.
خوب، این همه است SED و اکنون انجام شد.
تبریک می گویم!!
ما با موفقیت سطح موارد فوق را خراش داده ایم “گفت” فرمان
(Pun-o-meter در 2 اکنون)
اما امیدوارم این پست وبلاگ شما را قادر سازد تا موارد استفاده واقعی از sed را تصور کنید.
خب به من بگو…
چه چیزی می تواند یک بیان مسئله خوب برای حل با استفاده از sed باشد؟
(آشنایی برای وبلاگ دیگری دارید؟ ممکن است…)
ممنون که تا انتها درست کردید بازخورد را در زیر ارسال کنید.