البته، اینها کارهایی است که با grep، هم میتوانید انجام دهید، اما با آن فرمان نمیتوانید “جستجو و تعویض ” را انجام دهید. این فقط برای شروع به کار شماست.
این فایل متنی مثال ما میباشد:
sandy ~>
cat-n
example
1 This is the first line of an example text. 2 It is a text with erors. 3 Lots of erors. 4 So much erors, all these erors are making me sick. 5 This is a line not containing any errors. 6 This is the last line.sandy ~>
میخواهیم sed تمام سطرهای شامل الگوی جستجوی ما، که در این حالت، رشته “erors” میباشد را پیدا کند. ما از p برای به دست آوردن نتیجه استفاده میکنیم:
sandy ~>
sed'/erors/p'
example
This is the first line of an example text. It is a text with erors. It is a text with erors. Lots of erors. Lots of erors. So much erors, all these erors are making me sick. So much erors, all these erors are making me sick. This is a line not containing any errors. This is the last line.sandy ~>
به طوری که ملاحظه میکنید، sed تمام فایل را چاپ میکند، اما سطرهای محتوی رشته جستجو را دوبار چاپ میکند. این آنچه ما میخواهیم نیست. به منظور آن که فقط سطرهایی که با الگوی ما منطبق میشود، چاپ گردند، گزینه n-
را به کار میبریم:
sandy ~>
sed-n
'/erors/p'
example
It is a text with erors. Lots of erors. So much erors, all these erors are making me sick.sandy ~>
ما از همان نمونه فایل متنی استفاده میکنیم. حالا میخواهیم فقط سطرهایی را که شامل رشته جستجو نیستند را ببینیم:
sandy ~>
sed'/erors/d'
example
This is the first line of an example text. This is a line not containing any errors. This is the last line.sandy ~>
دستور d موجب میشود سطرهایی که شامل الگو نیستند، نمایش داده شوند.
مطابقت دادن سطرهایی که با یک الگو شروع و با الگوی دیگر خاتمه یابند به این صورت نشان داده میشود:
sandy ~>
sed-n
'/^This.*errors.$/p'
example
This is a line not containing any errors.sandy ~>
توجه داشته باشید که به منظور انطباق کاراکتر نقطه انتهایی، باید آن را با کاراکتر گریز پوشش دهیم. در مثال ما عبارت با هر کاراکتری، از جمله نقطه انتهایی منطبق میگردد.
در اینجا میخواهیم سطرهایی که شامل خطاها هستند را بیرون بکشیم. در مثال ما سطرهای ۲ تا ۴ میباشند. مشخص نمودن این دامنه آدرس، به طور یکجا با دستور d به این شکل:
sandy ~>
sed'2,4d'
example
This is the first line of an example text. This is a line not containing any errors. This is the last line.sandy ~>
برای چاپ یک فایل از ابتدا تایک سطر معین از فایل، دستوری مشابه این را به کار ببرید:
sandy ~>
sed'3,$d'
example
This is the first line of an example text. It is a text with erors.sandy ~>
این فقط دوسطر اول فایل نمونه ما را چاپ میکند.
دستور زیر اولین سطر شامل الگوی“a text”، تا اولین سطر بعدی که شامل الگوی “This” باشد را چاپ میکند:
sandy ~>
sed-n
'/a text/,/This/p'
example
It is a text with erors. Lots of erors. So much erors, all these erors are making me sick. This is a line not containing any errors.sandy ~>
حالا ما در فایل مثال، فقط جستجو و تعویض رشته errors را به جای رشته مورد جستجو در سطرهای انتخابی یا همه سطرها انجام میدهیم.
sandy ~>
sed's/erors/errors/'
example
This is the first line of an example text. It is a text with errors. Lots of errors. So much errors, all these erors are making me sick. This is a line not containing any errors. This is the last line.sandy ~>
به طوری که مشاهده میکنید، این به طور دقیق اثر مطلوب ما را ندارد: در سطر ۴، فقط اولین موردتطابق با رشته جستجو تعویض گردیده است، و هنوز یک 'eror' باقی مانده است. از دستور g برای نشان دادن به sed که ما از او میخواهیم به جای توقف در اولین مورد انطباق، تمام سطر را بررسی کند، استفاده میکنیم:
sandy ~>
sed's/erors/errors/g'
example
This is the first line of an example text. It is a text with errors. Lots of errors. So much errors, all these errors are making me sick. This is a line not containing any errors. This is the last line.sandy ~>
برای درج یک رشته در ابتدای هر یک از سطرهای یک فایل، به عنوان نمونه برای نقلقولی نمودن:
sandy ~>
sed's/^/> /'
example
> This is the first line of an example text. > It is a text with erors. > Lots of erors. > So much erors, all these erors are making me sick. > This is a line not containing any errors. > This is the last line.sandy ~>
درج رشتهها در انتهای هر سطر:
sandy ~>
sed's/$/EOL/'
example
This is the first line of an example text.EOL It is a text with erors.EOL Lots of erors.EOL So much erors, all these erors are making me sick.EOL This is a line not containing any errors.EOL This is the last line.EOLsandy ~>
دستورات چنگانه جستجو و جایگزینی با گزینههای جداگانه e-
از یکدیگر جدامیشوند:
sandy ~>
sed-e
's/erors/errors/g'
-e
's/last/final/g'
example
This is the first line of an example text. It is a text with errors. Lots of errors. So much errors, all these errors are making me sick. This is a line not containing any errors. This is the final line.sandy ~>
به خاطر داشته باشید که به طور پیشفرض sed نتایجش را در خروجی استاندارد چاپ میکند، به احتمال بسیار زیاد در پنجره ترمینال شما. اگر میخواهید خروجی را در یک فایل ذخیره کنید، آن را تغییر مسیر بدهید:
sed
option
'some/expression'
file_to_process
> sed_output_in_a_file
مثالهای بیشتر | |
---|---|
مثالهای فراوانی از sed را در اسکریپتهای شروع اولیه سیستم خود که به طور معمول دردایرکتوری
|