- جایگزینی عبارت test.com با عبارت 1.2.3.4 در فایل input.txt
sed 's/1.2.3.4/test.com/g' input.txt
- چاپ کردن خطوط ۲ تا ۲۱ از فایل input.txt
sed -n '2,21'p input.txt
- پاک کردن خطوطی که با کارکتر # شروع می شوند از فایل input.txt
sed '/^#/ d' input.txt or cat input.txt | sed '/^#/ d' or sed '/^#/ d' < input.txt
- پاک کردن خطوطی که با کارکتر # شروع می شوند و همچنین پاک کردن خطوطی که خالی هستند از فایل input.txt
sed '/^#/ d' input.txt | sed '/^$/ d'
- نمایش تنها خط ۳ از فایل input.txt
sed -n '3p' input.txt
- نمایش خط ۱ به انضمام چاپ خطوط بعدی با فواصل ۲تایی از فایل input.txt
sed -n '1~2p' input.txt
- چاپ خط ۲ تا ۷ از فایل input.txt
sed -n '2,7p' input.txt
- چاپ خط آخر از فایل input.txt
sed -n '$p' input.txt
- چاپ خط ۳ تا آخر از فایل input.txt
sed -n '3,$p' input.txt
- اعمال دستورات و قوانین از طریق اسکریپت با نام sed.script بر روی فایل input.txt
sed -n -f sed.script input.txt or cat input.txt | sed -n -f sed.script or sed -n -f sed.script < input.txt
- چاپ خط یا خطوطی که در آن عبارت test وجود داشته باشد از فایل input.txt
sed -n '/test/p' input.txt
- چاپ خطی که در ان عبارت test وجود دارد تا خط ۶ از فایل input.txt
sed -n '/test/,6p' input.txt
- چاپ خط ۳ تا خطی که در آن عبارت test وجود دارد از فایل input.txt
sed -n '3,/test/p' input.txt
- چاپ خطی که در آن عبارت test وجود دارد تا خط آخر از فایل input.txt
sed -n '/test/,$p' input.txt
- چاپ خطی که در آن عبارت test وجود دارد و همچنین تا ۳ خط بعد از آن از فایل input.txt
sed -n '/test/,+3p' input.txt
- چاپ خطوطی که در آن عبارت gnu و linux وجود دارد و همچنین چاپ خطوط بین این دو از فایل input.txt
sed -n '/gnu/,/linux/p' input.txt
- پاک کردن خط سوم از فایل input.txt
sed '3d' input.txt
- پاک کردن خط ۳ از فایل و همچین پاک کردن خطوط بعدی با فواصل ۲تایی نسبت به خط ۳ از فایل input.txt
sed '3~2d' input.txt
- پاک کردن خط 4 و 8 و خطوط بین آن دو از فایل input.txt
sed '4,8d' input.txt
- پاک کردن خط آخر از فایل input.txt
sed '$d' input.txt
- پاک کرن خط ۶ و پاک کردن خط ۶ تا خط آخر از فایل input.txt
sed '6,$d' input.txt
- پاک کردن خطی یا خطوطی که دارای عبارت test به هر نحوه در خود است از فایل input.txt
sed '/test/d' input.txt
- نکته: فرضا خطی دارای عبارت test123 نیز باشد، پاک می شود.
- پاک کردن خطی که حاوی عبارت test است و همچنین پاک کردن خط ۸ و همچنین پاک کردن تمام خطوط بین این دو از فایل input.txt
sed '/test/,8d' input.txt
- پاک کردن خط ۳ و همچنین پاک کردن خطی که درون آن عبارت test قرار دارد و همچنین پاک کردن خطوط بین این دو
sed '3,/test/d' input.txt
- پاک کردن خطی که داخل آن عبارت test است تا آخر
sed '/test/,$d' input.txt
- پاک کردن خطی که درون آن عبارت line3 هست و همچنین تا دو خط بعد از آن از فایل input.txt
# sed '/test/,+2d' input.txt line1 line2 line6 line7 line8 line9 line10
- همان طور که مشاهده می کنید خط ۳ چاپ نشد و ۲ خط بعد از آن هم چاپ نشد.
- پاک کردن خطی که عبارت gnu در آن هست و پاک کردن خطی که عبارت linux در آن است و پاک کردن خطوط بین این دو
# sed '/gnu/,/linux/d' input.txt line7local line8computer line9keyboard line10grep
- نکته: ممکن است در درون فایل، عبارات gnu و linux چندین دفعه تکرار شده باشد. در این صورت ابزار sed اولین عبارات را در نظر گرفته و قوانین را بر روی آن اعمال می کند.
- جایگزینی عبارت linux با Gnu-Linux در هر خط از فایل input.txt
sed 's/linux/Gnu-Linux/' input.txt line1gnu line2Gnu-Linux line3gnu line4server line5client line6computer line7local line8computer line9keyboard line10grep
- نکته قابل ذکر این است که تنها اولین کلمه در هر خط دستخوش تغییرات می باشد.
- یعنی اگر در یک خط دو بار کلمه linux وجود داشته باشد، تنها اولین linux به Gnu-Linux تغییر پیدا می کند.
- جایگزینی عبارت linux با # در هر خط از فایل input.txt
sed 's/linux/#/g' input.txt line1gnu line2# line3gnu line4server line5client line6computer line7local line8computer line9keyboard line10grep
- از آنجا که از حرف g به معنی Global یا کلی استفاده کردیم، تمامی linux های موجود در هر خط به کارکتر # تغییر پیدا می کنند.
- جایگزینی دومین عبارت linux از هر خط با کارکتر #
sed 's/linux/#/2' input.txt
- از آنجا که از عدد 2 در آخر قانون خود استفاده کردیم، لذا تنها دومین linux موجود در هر خط به کارکتر # تغییر پیدا می کند.
- طبیعتا اگر در خطی دومین عبارت linux وجود نداشته باشد، آن خط دستخوش تغییرات نمی شود.
- جایگزینی دومین عبارت linux به بعد از هر خط با کارکتر #
sed 's/linux/#/2g' input.txt
- دستورات بالا تمام linux های موجود در هر خط را به جز اولین، با کارکتر # جایگزین می کند.
- یعنی فرضا ممکن است در یک خط ۳ بار کلمه linux تکرار شده باشد. در این صورت دومین و سومین کلمه linux از آن خط دستخوش تغییرات می شود و اولین کلمه linux بدون تغییر باقی می ماند.
- تغییر تمام linux های موجود در خط ۵ با کارکتر #
sed '5 s/linux/#/g' input.txt
- توجه داشته باشید که فقط خط ۵ دست خوش تغییرات خواهد شد.
- تغییر اولین linux موجود در خط ۵ به کارکتر #
sed '5 s/linux/#/p' input.txt
- توجه داشته باشید که از سویچ n- استفاده نکردیم، لذا بقیه خطوط نیز چاپ خواهد شد.
- توجه داشته باشید که چون از حرف p در انتهای قانون استفاده کردیم، لذا خط ۵ دو مرتبه چاپ خواهد شد.
- معمولا زمانی که از حرف p در قانون استفاده می کنیم، سویچ n- را نیز به کار می بریم.
- تغییر تمام linux موجود در خط ۵ به کارکتر # و چاپ تنها خط ۵
sed -n '5 s/linux/#/pg' input.txt
- توجه داشته باشید که حرف g در قانون به منظور اعمال تغییرات بر روی کلمات linux در خط ۵ است.
- توجه داشته باشید که حرف p در قانون به منظور چاپ خط ۵ می باشد.
- توجه داشته باشید که سویچ n- به منظور عدم چاپ و نمایش باقی خطوط می باشد.
- توجه داشته باشید که pg یا gp در قانون تفاوت خاصی ندارد.
- تغییر کلیه کلمات linux با # در خط ۲ تا ۵ و خطوط بین آن
- چاپ تنها خطوطی که دستخوش تغییرات شدند
sed -n '2,5 s/linux/#/pg' input.txt
- تغییر کلیه کلمات linux با کارکتر # در خط ۲ تا آخر خط آخر
- چاپ تنها خطوطی که دستخوش تغییرات شدند.
sed -n '2,$ s/linux/#/p' input.txt
- به صورت پیشفرض ابزار sed به حروف کوچک و بزرگ حساس است.
- در صورتی که نیاز باشد این حساسیت غیر فعال شود، از حرف I در قسمت قانون استفاده می کنیم.
- به عنوان مثال: تغییر کلیه کلمات linux با کارکتر # در تمامی خطوط بدون حساسیت به بزرگی و کوچیکی حروف
sed 's/linux/#/Ig' input.txt
- حرف g در قانون به منظور اعمال تغییرات بر روی کلمات linux در هر خط می باشد.
- پیدا کردن خطوطی که در آن کارکتر – وجود دارد.
- تغییر کارکتر – به کارکتر +
- پاک کردن از کارکتر + تا انتهای خط
- به عنوان نمونه فایل زیر را در نظر بگیرید :
line1- line2- sed example line3 - - line4 - 4
# sed 's/-.*/+/' input.txt line1+ line2+ line3 + line4 +
- به خط ۲ توجه کنید، عبارت بعد از کارکتر + تا انتهای خط پاک شده است.
- به خط ۴ توجه کنید، عبارت بعد از کارکتر + تا انتهای خط پاک شده است.
- پیدا کردن ۳ کارکتر آخر از هر خط
- جایگزینی این ۳ کارکتر با عبارت SALAM
- به عنوان نمونه فایل زیر را در نظر بگیرید :
line1- line2- sed example line3 - - line4 - 4
# sed 's/...$/SALAM/' input.txt linSALAM line2- sed examSALAM line3 SALAM line4 SALAM
- توجه داشته باشید که عبارت $… در قسمت قانون به منزلهی ۳ کارکتر آخر می باشد.
- طبیعتا می توان برای اشاره به ۲ کارکتر آخر از عبارت $.. استفاده کرد.
- توجه داشته باشید که کارکتر $ در بخش قانون به منزله پایان خط می باشد.
- پیدا کردن ۳ کارکتر ابتدای هر خط
- جایگزینی این ۳ کارکتر با عبارت SALAM
- به عنوان نمونه فایل زیر را در نظر بگیرید :
line1- line2- sed example line3 - - line4 - 4
# sed 's/^.../SALAM/' input.txt SALAMe1- SALAMe2- sed example SALAMe3 - - SALAMe4 - 4
- توجه داشته باشید که عبارت …^ در قسمت قانون به منزلهی ۳ کارکتر اول خط می باشد.
- طبیعتا می توان برای اشاره به ۲ کارکتر اول، از عبارت ..^ استفاده کرد.
- توجه داشته باشید که کارکتر ^ در بخش قانون به منزله ابتدای خط می باشد.
- فایل زیر را به عنوان نمونه در نظر بگیرید :
/var/www/html/
- می خواهیم فایل بالا را به شکل زیر تبدیل کنیم :
/var/apache/files/
- از آنجایی که در بخش قانون باید به کارکتر / اشاره کنیم، لذا کمی متفاوت باید عمل کنیم. برای این منظور :
# sed 's/www\/html/apache\/files/' input.txt /var/apache/files/
- sed ‘s/www\/html/apache\/files/‘ input.txt
- همان طور که ملاحظه می کنید، برای اشاره به کارکتر / در درون قسمت قانون، به صورت /\ عمل می کنیم.
- در مثال بالا می توان از @ یا : به جای استفاده از / استفاده کرد. به / یا @ یا : اصطلاحا delimiter گفته می شود. مطالعه بیشتر در اینجا
- به عنوان مثال :
sed 's@www/html@apache/files' input.txt
sed 's:www/html:apache/files:' input.txt
- فایل زیر را به عنوان نمونه در نظر بگیرید :
/var/www/html/
- می خواهیم عبارت wordpress به انتهای عبارت /html/ اضافه شود. برای این منظور :
# sed 's:/html/:&wordpress:' input.txt /var/www/html/wordpress
- به عنوان مثالی دیگر می خواهیم عبارت wordpress به انتهای عبارت /www/ اضافه شود. برای این منظور :
# sed 's:/www/:&wordpress/:' input.txt /var/www/wordpress/html/
- همان طور که ملاحظه می کنید از کارکتر ampersand در بخش اسکریپت استفاده کردیم. مطالعه بیشتر در این خصوص در این لینک
- میخواهیم بعد از خط سوم خطی جدید با مظمون test اضافه کنیم.
- برای این منظور :
# sed '3 a \test' input.txt line1 line2 line3 test line4
- حرف a در بخش اسکریپت به منظور اضافه کردن یا append می باشد.
- می خواهیم به دنبال یک رشته بگردیم
- سپس بعد از آن خطی جدید با مضمونی خاص اضافه کنیم.
# sed '/line2/a\L i n u x' input.txt line1 line2 L i n u x line3 line4
- در صورتی که در فایل ورودی، چندین عبارت line2 پیدا شود، زیر تک تک خطوط آن کلمه L i n u x نوشته می شود. (append می شود)
- می خواهیم بعد از هر خط یک خط خالی اضافه کنیم.
- برای این منظور :
# sed '/$/a\\' input.txt line1 line2 line3 line4
- می خواهیم بعد از هر خط، یک خط با محتوای New_Line اضافه کنیم. برای این منظور :
# sed '/$/a\New_Line' input.txt line1 New_Line line2 New_Line line3 New_Line line4 New_Line
- اضافه کردن عبارت LAST_LINE بعد از آخرین خط از فایل :
# sed '$ a\LAST_LINE' input.txt
- اضافه کردن عبارت test بعد از هر خط، از خط چهارم تا آخرین خط
# sed '4,$ a\test' input.txt
- اضافه کردن خط جدید بر روی خط ۴ نیز اعمال خواهد شد.
- اضافه کردن عبارت TEST قبل از خط سوم
# sed '3 i\TEST' input.txt line1 line2 TEST line3 line4
- از فرمان i به منظور اضافه کردن قبل از یا Insert استفاده می شود.
- اضافه کردن عبارت TEST قبل از خط یا خطی هایی که حاوی عبارت line4 باشند.
sed '/line4/ i\TEST' input.txt line1 line2 line3 TEST line4
- نکته: ممکن است چندین خط حاوی عبارت line4 باشد، لذا عبارت TEST قبل از تمام خطوط آنان اضافه می شود.
- اضافه کردن عبارت ——- قبل از تمامی خطوط موجود در فایل.
# sed '/$/ i\-------' input.txt ------- line1 ------- line2 ------- line3 ------- line4
- اضافه کردن عبارت ——- قبل از آخرین خط موجود در فایل.
# sed '$ i\-------' input.txt line1 line2 line3 ------- line4
- اضافه کردن کارکتر # قبل از خط ۳ تا آخرین خط موجود در فایل.
# sed '3,$ i\#' input.txt line1 line2 # line3 # line4
- نکته: همان طور که مشاهده می کنید، کارکتر # قبل از خط ۳ نیز اضافه شده است.
- پاک کردن خطی مشخص بر اساس شماره خط
- و جایگزینی آن خط با عبارت یا جمله ای مشخص
# sed '2 c\This is LINE_2' input.txt line1 This is LINE_2 line3 line4
- استفاده از فرمان c در بخش اسکریپت به معنی جایگزینی و تغییر است.
- پاک کردن خط یا خط هایی که حاوی عبارت line هستند
- و جایگزینی آن خط با عبارت یا جمله ای مشخص
# sed '/line/c\This is a line' input.txt This is a line This is a line This is a line This is a line
- همان طور که ملاحظه می کنید، تمام خطوط دستخوش تغییرات شدند چرا که عبارت line در تمام خطوط وجود داشت.
- پاک کردن خط پایانی از فایل ورودی
- و جایگزینی آن را عبارت یا جمله ای مشخص
# sed '$ c\Last Line' input.txt line1 line2 line3 Last Line
- همان طور که مشاهده می کنید خط آخر یعنی خط چهارم پاک شد سپس با عبارت Last Line جایگزین شد.
- پاک کردن از خط دوم تا خط آخر
- و جایگزینی آن خطوط با تنها عبارت یا جمله ای مشخص
# sed '2,$ c\$' input.txt line1 $
- نکته: دستور بالا باعث شد تا خطوط دوم، سوم و چهارم پاک شوند و تنها خطی با مضمون $ جایگزین آنان شود.
- پاک کردن تک تک خطوط فایل
- و جایگزینی عبارت یا جمله ای مشخص با تک تک خطوط
# sed '/$/ c\linux' input.txt linux linux linux linux
- همان طور که ملاحظه می کنید، تمام خطوط با عبارت linux جایگزین شدند.
- چاپ کردن شماره خطوط هر خط
# sed '=' input.txt 1 line1 2 line2 3 line3 4 line4
- همان طور که ملاحظه می کنید، شماره هر خط در خط قبلی آن مشخص شده است.
- پیدا کردن شماره خطی که حاوی عبارتی خاص است :
# sed '/line3/=' input.txt line1 line2 3 line3 line4
- همان طور که مشاهده می کنید به دنبال عبارت line3 گشتیم و شماره خط آن در قسمت خروجی مشخص شده است.
- برای چاپ نشدن خروجی پیش فرض pattern space یا pattern buffer از سویچ n- استفاده می کنیم :
# sed -n '/line3/=' input.txt 3
- ممکن است دنبال عبارتی بگردیم که در چندین خط وجود داشته باشد، در این صورت شماره خط تمامی ان خطوط نمایش داده می شود.
- چاپ شماره خطوط دو عبارت خاص و جدا از هم
- و چاپ شماره خطوط بین خطی که حاوی این دو عبارت هستند.
# sed -n '/line2/,/line4/=' input.txt 2 3 4
- همان طور که مشاهده می کنید شماره خطوطی که حاوی عبارت line2 و line4 بود نمایش داده شد و همچنین شماره خطوطی که بین این دو هستند نیز نمایش داده شد.
- نکته: با توجه به مثال بالا، ممکن است چندین خطوط وجود داشته باشد که حاوی عبارت line2 یا line4 باشند. در این صورت اولیوت و همیشه به اولین یافته است.
- به عنوان مثال فایل زیر را در نظر بگیرید :
line1 line1 line2 line2 line3 line4 line4
# sed -n '/line2/,/line4/=' input.txt 3 4 5 6
- همان طور که مشاهده می کنید خروجی از خط 3 یعنی اولین یافتهی line2 و تا خط 6 یعنی اولین یافتهی line4 نمایش داده شده است.
- پیدا کردن شمارهی آخرین خط از فایل ورودی
# sed -n '$ =' input.txt 7
- فایل فرض دارای 7 خط بود که با دستور بالا شماره خط آخرین خط نمایش داده شد.
نکات
- در مثال های بالا گفته شد که فرضا خط سوم چاپ شود، باید توجه شود که منظور از خط سوم فقط خطی که دارای عبارات یا کلمات یا کارکتر باشد نیست، بلکه خطوط خالی نیز به عنوان خط حساب و شمرده می شوند.
sed -n '3p' input # print only line3 sed -n '1~2p' input # print lines sed -n '2,7p' input # print line2 until line7 sed -n '$p' input # print only last line sed -n '3,$p' input # print line3 until last line sed -n -f sed.script input # load sed rules from file cat input | sed -n -f sed.script # load sed rules from file sed -n -f sed.script < input # load sed rules from file sed -n '/Databases/p' input # print line sed -n '/Databases/,6p' input # print database line until line6 sed -n '3,/Security/p' input # print line3 until security line sed -n '/Cool/,$p' input # print Cool line until last line sed -n '/Storage/,+3p' input # print Storage line and 3line after than sed -n '/Databases/,/Storage/p' input # print Database line until Storage line