جایی برای نوشتن

بایگانی
آخرین نظرات

۶ مطلب در بهمن ۱۳۹۳ ثبت شده است

۱۲بهمن

لیست پنجاه مثال حل شده sed را می توانید به صورت یکجا در اینجا مرور کنید.


پنجاه مثال تک خطی sed - بخش اول

پنجاه مثال تک خطی sed - بخش دوم

پنجاه مثال تک خطی sed - بخش سوم

پنجاه مثال تک خطی sed - بخش چهارم




پنجاه مثال تک خطی sed - بخش اول

     1    ابتدا و انتهای هر خط را با کاراکترهای > و < علامتگذاری کنید .
     2    یک خط خالی زیر هر خط اضاقه کنید :
     3    یک خط خالی بالای هر خط اضافه کنید:
     4    یک خط خالی زیر و یک خط خالی بالای هر خط اضافه کنید.
     5    فضاهای خالی ابتدای هر خط را حذف کنید.
     6    فضاهای خالی انتهای هر خط را حذف کنید. برای بررسی صحت انجام دستور انتهای خط را با کاراکتر < مشخص کنید.
     7    فضاهای خالی ابتدا و انتهای هر خط را حذف کنید. برای بررسی صحت انجام این دستور ( حذف فضای خالی انتهای خطوط‌ ) محتوای هر خط را بین کاراکترهای > و < محصور کنید.
     8    ۵ کاراکتر < را به ابتدای تمامی خطوطی که با space شروع نمی شوند اضافه کنید.
     9    خطوط ۵ تا ۸ را نمایش دهید.
    10    خط شماره 4 را نمایش دهید.

پنجاه مثال تک خطی sed - بخش دوم

    11    کلیه خطوط خالی را حذف کنید.
    12    خط های خالی را حذف کنید و آخرین کاراکتر هر خط غیر خالی را پاک کنید.
    13    شماره هر خط را در سمت چپ همان خط نمایش دهید.
    14    شماره هر خط غیر خالی را در سمت چپ آن قرار دهید.
    15    تعداد کل خط های یک فایل را برگردانید. (مشابه دستور wc -l)
    16    دستور nl -ba را به صورت دقیق با sed پیاده سازی کنید.
    17    عدد ۱۶۴۸۱۹۵ و یا به طور کلی هر عدد را سه رقم سه رقم با , از هم جدا کنید.
    18    کلیه خطوط را در فضای ۷۹ کاراکتری راست چین کنید.
    19    کلیه خطوط را در فضای ۷۹ کاراکتری وسط چین کنید.
    20    هر خط را با خط بعدی یکی کرده و با یک فاصله از هم جدا کنید.

پنجاه مثال تک خطی sed - بخش سوم

    21    اولین salam را با KHODAHAFEZ جایگزین کنید.
    22    چهارمین salam را با KHODAHAFEZ جایگزین کنید.
    23    آخرین salam را با KHODAHAFEZ جایگزین کنید.
    24    salam یکی مانده به آخرین salam را با KHODAHAFEZ جایگزین کنید.
    25    کلیه salam ها را با KHODAHAFEZ جایگزین کنید.
    26    خط هایی که با \ تمام شده اند را با خط بعدیشان ترکیب کنید و با یک کاراکتر فاصله در یک خط نمایش دهید.
    27    خط هایی که با = شروع شده اند را با خط قبلی ترکیب کرده و با یک کاراکتر فاصله در یک خط نمایش دهید.
    28    بعد از هر ۵ خط یک خط خالی قرار دهید.
    29    خط هایی که با = شروع می شوند را نمایش دهید . (دستور grep)
    30    خط هایی که با = شروع نمی شوند را نمایش دهید. (دستور grep -v)

پنجاه مثال تک خطی sed - بخش چهارم

    31    ۵ خط اول را نمایش دهید.
    32    ۵ خط آخر را نمایش دهید.
    33    خط یکی مانده به آخر را نمایش دهید.
    34    خط آخر را نمایش دهید.
    35    ۲ خط آخر یک فایل را نمایش دهید.
    36    خط های فایل را از انتها به ابتدا بنویسید. (مشابه دستور tac)
    37    خط قبلی حاوی عبارت 10 را نمایش دهید.
    38    خط بعدی حاوی عبارت 10 را نمایش دهید.
    39    خط حاوی عبارت 10 و خط قبلی و خط بعدی آن را نمایش دهید . (مشابه دستور grep -A1 -B1)
    40    کلیه خطوطی که دقیقا ۲۴ کاراکتر می باشند را نمایش دهید.

پنجاه مثال تک خطی sed - بخش پنجم

    41    خطوط ۱ تا ۱۰ را پاک کنید.
    42    خط آخر را حذف کنید.
    43    خط های مضرب ۳ را حذف کنید.
    44    ۵ خط آخر را حذف کنید.
    45    دو خط آخر را حذف کنید.
    46    خط های تکراری پشت سر هم را حذف کنید. (مشابه دستور uniq)
    47    خط های تکراری را نمایش دهید. (مشابه دستور uniq -d)
    48    خط های غیر تکراری را نمایش دهید. (مشابه دستور uniq -u)
    49    خطوط حاوی عبارات 2# و 4# را نمایش دهید.
    50    کاراکترهای هر خط را معکوس کنید. (مشابه دستور rev)




پنجاه مثال تک خطی sed - بخش اول

پنجاه مثال تک خطی sed - بخش دوم

پنجاه مثال تک خطی sed - بخش سوم

پنجاه مثال تک خطی sed - بخش چهارم

پنجاه مثال تک خطی sed - بخش پنجم



...:::... محسن ...:::...
۱۱بهمن

در مثال های شماره ۱ تا ۵ محتوای فایل data.txt به شرح زیر می باشد:


# cat data.txt
1 This is line number: #0!
2 This is line number: #1
3 This is line number: #1
4 This is line number: #2
5 This is line number: #2
6 This is line number: #2
7 This is line number: #4
8 This is line number: #5
9 This is line number: #6
10 This is line number: #6
11 This is line number: #6
12 This is line number: #7

مثال ۱)  خطوط ۱ تا ۱۰ را پاک کنید.

# sed '1,10 d' data.txt
11 This is line number: #6
12 This is line number: #7

مثال ۲)  خط آخر را حذف کنید.

# sed '$ d' data.txt
1 This is line number: #0!
2 This is line number: #1
3 This is line number: #1
4 This is line number: #2
5 This is line number: #2
6 This is line number: #2
7 This is line number: #4
8 This is line number: #5
9 This is line number: #6
10 This is line number: #6
11 This is line number: #6

مثال ۳)  خط های مضرب ۳ را حذف کنید.

# sed '0~3 d' data.txt
1 This is line number: #0!
2 This is line number: #1
4 This is line number: #2
5 This is line number: #2
7 This is line number: #4
8 This is line number: #5
10 This is line number: #6
11 This is line number: #6

مثال ۴)  ۵ خط آخر را حذف کنید.

# sed -n ':a N; 1,5 ba; P;D' data.txt
1 This is line number: #0!
2 This is line number: #1
3 This is line number: #1
4 This is line number: #2
5 This is line number: #2
6 This is line number: #2
7 This is line number: #4

مثال ۵)  دو خط آخر را حذف کنید.

# sed ':a N;$ {1d;2d; s/\(.*\)\n.*\n.*$/\1/;q}; ba' data.txt
1 This is line number: #0!
2 This is line number: #1
3 This is line number: #1
4 This is line number: #2
5 This is line number: #2
6 This is line number: #2
7 This is line number: #4
8 This is line number: #5
9 This is line number: #6
10 This is line number: #6

در مثالهای شماره ۶ تا ۱۰ محتوای فایل data.txt به شرح زیر است:

# cat data.txt
This is line number: #0!
This is line number: #1
This is line number: #1
This is line number: #2
This is line number: #2
This is line number: #2
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #6
This is line number: #6
This is line number: #7

مثال ۶)  خط های تکراری پشت سر هم را حذف کنید. (مشابه دستور uniq)

# sed ':a N; s/^\(.*\)\n\1/\1/;ta;P;D' data.txt
This is line number: #0!
This is line number: #1
This is line number: #2
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7

مثال ۷)  خط های تکراری را نمایش دهید. (مشابه دستور uniq -d)

#

مثال ۸)  خط های غیر تکراری را نمایش دهید. (مشابه دستور uniq -u)

#

مثال ۹)  خطوط حاوی عبارات 2# و 4# را نمایش دهید.

# sed -n '/#2/ p; /#4/ p' data.txt
This is line number: #2
This is line number: #2
This is line number: #2
This is line number: #2
This is line number: #4

مثال ۱۰)  کاراکترهای هر خط را معکوس کنید. (مشابه دستور rev)

# sed 's/$/\n/; :a s/^\([^\n]\)\(.*\n\)\(.*\)$/\2\1\3/;ta; s/\n//' data.txt
!0# :rebmun enil si sihT
1# :rebmun enil si sihT
1# :rebmun enil si sihT
2# :rebmun enil si sihT
2# :rebmun enil si sihT
2# :rebmun enil si sihT
2# :rebmun enil si sihT
4# :rebmun enil si sihT
5# :rebmun enil si sihT
6# :rebmun enil si sihT
6# :rebmun enil si sihT
6# :rebmun enil si sihT
7# :rebmun enil si sihT
 


...:::... محسن ...:::...
۱۱بهمن

در تمام مثال های این بخش محتوای فایل data.txt به شرح زیر خواهد بود:


# cat data.txt
This is line number: #1
This is line number: #2
This is line number: #3
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7
This is line number: #8
This is line number: #9
This is line number: #10
This is line number: #11
This is line number: #12
This is line number: #13

مثال ۱)  ۵ خط اول را نمایش دهید.

# sed -n '1,5 p' data.txt
This is line number: #1
This is line number: #2
This is line number: #3
This is line number: #4
This is line number: #5

مثال ۲)  ۵ خط آخر را نمایش دهید.

# sed ':a N; 1,5 ba; D' data.txt
This is line number: #9
This is line number: #10
This is line number: #11
This is line number: #12
This is line number: #13

مثال ۳)  خط یکی مانده به آخر را نمایش دهید.

# sed '$ {1 d;g;q}; h;d' data.txt
This is line number: #12

مثال ۴)  خط آخر را نمایش دهید.

# sed '$ !d' data.txt
This is line number: #13

مثال ۵)  ۲ خط آخر یک فایل را نمایش دهید.

# sed '$ {1 q;x;p;x;q}; h;d' data.txt
This is line number: #12
This is line number: #13

مثال ۶)  خط های فایل را از انتها به ابتدا بنویسید. (مشابه دستور tac)

$ sed '1 !G;h;$!d' data.txt
This is line number: #13
This is line number: #12
This is line number: #11
This is line number: #10
This is line number: #9
This is line number: #8
This is line number: #7
This is line number: #6
This is line number: #5
This is line number: #4
This is line number: #3
This is line number: #2
This is line number: #1

مثال ۷)  خط قبلی حاوی عبارت 10 را نمایش دهید.

# sed '/10/ {g;1 !p};h;d' data.txt
This is line number: #9

مثال ۸)  خط بعدی حاوی عبارت 10 را نمایش دهید.

# sed -n '/10/ {n;p}' data.txt
This is line number: #11

مثال ۹)  خط حاوی عبارت 10 و خط قبلی و خط بعدی آن را نمایش دهید . (مشابه دستور grep -A1 -B1)

# sed -n '/10/ {x;1!p;g;$!N;p;D;}; h' data.txt
This is line number: #9
This is line number: #10
This is line number: #11

مثال ۱۰)  کلیه خطوطی که دقیقا ۲۴ کاراکتر می باشند را نمایش دهید.

# sed '/^.\{24\}$/ !d' data.txt
This is line number: #10
This is line number: #11
This is line number: #12
This is line number: #13


...:::... محسن ...:::...
۱۰بهمن

در این بخش ۱۰ مثال دیگر sed  را مطرح و اجرا می کنیم . از مثال ۱ تا مثال ۵ محتوای فایل data.txt به شرح زیر است:


# cat data.txt
salam salam salam salam salam man mohsen hastam


مثال ۱)  اولین salam را با KHODAHAFEZ جایگزین کنید.


# sed 's/salam/KHODAHAFEZ/' data.txt
KHODAHAFEZ salam salam salam salam man mohsen hastam

مثال ۲)  چهارمین salam را با KHODAHAFEZ جایگزین کنید.

# sed 's/salam/KHODAHAFEZ/4' data.txt
salam salam salam KHODAHAFEZ salam man mohsen hastam

مثال 3)  آخرین salam را با KHODAHAFEZ جایگزین کنید.

# sed 's/\(.*\)salam/\1KHODAHAFEZ/' data.txt
salam salam salam salam KHODAHAFEZ man mohsen hastam

مثال ۴)  salam یکی مانده به آخرین salam را با KHODAHAFEZ جایگزین کنید.

# sed 's/\(.*\)salam\(.*salam.*\)/\1KHODAHAFEZ\2/' data.txt
salam salam salam KHODAHAFEZ salam man mohsen hastam

مثال ۵)  کلیه salam ها را با KHODAHAFEZ جایگزین کنید.

# sed 's/salam/KHODAHAFEZ/g' data.txt
KHODAHAFEZ KHODAHAFEZ KHODAHAFEZ KHODAHAFEZ KHODAHAFEZ man mohsen hastam

از مثال ۶ تا ۱۰  محتوای فایل data.txt  به شرح زیر است :

# cat data.txt
This is line number: #1
This is line number: #2 \
=This is line number: #3 \
=This is line number: #4
=This is line number: #5
This is line number: #6 \
This is line number: #7 \
This is line number: #8 \
This is line number: #9
=This is line number: #10
=This is line number: #11
This is line number: #12
This is line number: #13

مثال ۶)  خط هایی که با \ تمام شده اند را با خط بعدیشان ترکیب کنید و با یک کاراکتر فاصله در یک خط نمایش دهید.

# sed ':a /\\$/ {N;s/\\\n/ /; ta;}' data.txt
This is line number: #1
This is line number: #2 =This is line number: #3 =This is line number: #4
=This is line number: #5
This is line number: #6 This is line number: #7 This is line number: #8 This is line number: #9
=This is line number: #10
=This is line number: #11
This is line number: #12
This is line number: #13

مثال ۷)  خط هایی که با = شروع شده اند را با خط قبلی ترکیب کرده و با یک کاراکتر فاصله در یک خط نمایش دهید.

# sed  ':a N; /\n=/ { s/\n=/ /;ta; }; P;D;' data.txt
This is line number: #1
This is line number: #2 \ This is line number: #3 \ This is line number: #4 This is line number: #5
This is line number: #6 \
This is line number: #7 \
This is line number: #8 \
This is line number: #9 This is line number: #10 This is line number: #11
This is line number: #12
This is line number: #13

مثال ۸)  بعد از هر ۵ خط یک خط خالی قرار دهید.

# sed 'n;n;n;n;G' data.txt
This is line number: #1
This is line number: #2 \
=This is line number: #3 \
=This is line number: #4
=This is line number: #5

This is line number: #6 \
This is line number: #7 \
This is line number: #8 \
This is line number: #9
=This is line number: #10

=This is line number: #11
This is line number: #12
This is line number: #13

دستور n محتوای فعلی pattern space را در خروجی استاندارد می نویسد و سپس خط بعدی را می خواند و داخل pattern space قرار می دهد. این دستور در GNU sed می تواند به صورت زیر نوشته شود:

# sed '0~5 G' data.txt
This is line number: #1
This is line number: #2 \
=This is line number: #3 \
=This is line number: #4
=This is line number: #5

This is line number: #6 \
This is line number: #7 \
This is line number: #8 \
This is line number: #9
=This is line number: #10

=This is line number: #11
This is line number: #12
This is line number: #13

مثال ۹)  خط هایی که با = شروع می شوند را نمایش دهید . (دستور grep)

# sed -n '/^=/ p' data.txt
=This is line number: #3 \
=This is line number: #4
=This is line number: #5
=This is line number: #10
=This is line number: #11

مثال ۱۰)  خط هایی که با = شروع نمی شوند را نمایش دهید. (دستور grep -v)

# sed '/^=/ d' data.txt
This is line number: #1
This is line number: #2 \
This is line number: #6 \
This is line number: #7 \
This is line number: #8 \
This is line number: #9
This is line number: #12
This is line number: #13

...:::... محسن ...:::...
۰۹بهمن

بخش دوم دستورات تک خطی sed با ۱۰ مثال پیش روی شماست . در این بخش دستورات داده شده اکثرا بر روی فایل data.txt با محتوای زیر اعمال می شوند.


# cat data.txt


This is line number: #3. line 1 and 2 is empty
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7

This is line number: #9
This is line number: #10


This is line number: #13 . Note that line number 14 is empty


برای بررسی دقیق فایل بالا و اطلاع از خطوط خالی و تعداد خط ها با استفاده از دستور sed ابتدا و انتهای هر خط را با علامتهای > و < مشخص کرده و سپس با دستور nl کلیه خطوط خروجی را شماره گذاری می کنیم.

# sed 's/^/</;s/$/>/' data.txt | nl -ba
1 <>
2 <>
3 < This is line number: #3. line 1 and 2 is empty>
4 <This is line number: #4>
5 < This is line number: #5>
6 < This is line number: #6>
7 <This is line number: #7>
8 <>
9 < This is line number: #9 >
10 <This is line number: #10>
11 <>
12 <>
13 <This is line number: #13 . Note that line number 14 is empty>
14 <>

همانگونه که مشاهده می کنید خط ۱ و ۲ در ابتدای فایل و همچنین خط ۱۴ در انتهای فایل خالی می باشند. خطوط ۸ و ۱۱ و ۱۲ نیز خالی می باشند. خطوط ۳ و ۵ و ۶ و ۹ با کاراکترهای space شروع می شوند و خط ۹ نیز به تعدادی کاراکتر space ختم می شود. حال که ساختار فایل ورودی به صورت شفاف شناخته شد ، مثالهایی از دستور sed را در ادامه بررسی می کنیم.

مثال ۱)  کلیه خطوط خالی را حذف کنید.

# sed '/^$/ d' data.txt
This is line number: #3. line 1 and 2 is empty
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7
This is line number: #9
This is line number: #10
This is line number: #13 . Note that line number 14 is empty

مثال ۲)  خط های خالی را حذف کنید و آخرین کاراکتر هر خط غیر خالی را پاک کنید.

# sed '/^$/ d;s/.$//' data.txt
This is line number: #3. line 1 and 2 is empt
This is line number: #
This is line number: #
This is line number: #
This is line number: #
This is line number: #9
This is line number: #1
This is line number: #13 . Note that line number 14 is empt

برای بررسی صحت عملکرد دستور به کاراکترهای پایان هر خط توجه کنید .

مثال ۳)  شماره هر خط را در سمت چپ همان خط نمایش دهید.

# sed '=' data.txt | sed 'N;s/\n/\t/'
1
2
3 This is line number: #3. line 1 and 2 is empty
4 This is line number: #4
5 This is line number: #5
6 This is line number: #6
7 This is line number: #7
8
9 This is line number: #9
10 This is line number: #10
11
12
13 This is line number: #13 . Note that line number 14 is empty
14

در مثال فوق دو بار  sed را استفاده کرده ایم . دستور = که جز دستورات sed است شماره خط فعلی را به اضافه ی یک کاراکتر n\ یا new line در خروجی استاندارد می نویسد . برای اطلاع توجه داشته باشید که دستور = علی رغم استفاده از سوییچ n- باز هم شماره خط را در خروجی استاندارد می نویسد و یا به عبارت دیگر سوییچ  n- تاثیری بر روی عملکرد دستور = ندارد. برای فهم دقیق دستور بالا ابتدا فقط قسمت اول دستور یا قسمت قبل از pipe آن را بررسی می کنیم.

# sed '=' data.txt
1

2

3
This is line number: #3. line 1 and 2 is empty
4
This is line number: #4
5
This is line number: #5
6
This is line number: #6
7
This is line number: #7
8

9
This is line number: #9
10
This is line number: #10
11

12

13
This is line number: #13 . Note that line number 14 is empty
14


همانطور که مشاهده می کنید دستور = شماره خط را در خروجی استاندارد می نویسد و سپس یک کاراکتر n\ چاپ می کند . از طرف دیگر sed به صورت خودکار بعد از اجرای تمام دستورات در یک سیکل ، محتوای pattern space را  خروجی استاندارد چاپ می کند . پس نتیجه اجرای دستور به این صورت در می آید که یک خط شماره خط و خط دیگر محتوای خط نمایش داده می شود و به همین صورت تا انتهای فایل. برای فهم دقیق مساله به خروجی مثال بالا توجه کنید.

حال مساله کامل را بررسی می کنیم :

# sed '=' data.txt | sed 'N;s/\n/\t/'

بخش اول دستور بالا قبل از pipe همان است که در بالا خروجی آن را دیدیم که این بار خروجی خود را در pipe می ریزد و sed دوم هم ورودی خود را به جای خواندن از فایل اینبار از pipe می خواند. دستور N در sed دوم خط بعدی را می خواند و به pattern space اضافه می کند و دستور s کاراکتر n\ موجود بین دو خط حاضر در pattern space را به کاراکتر t\ یعنی همان tab عوض می کند.

مثال ۴)  شماره هر خط غیر خالی را در سمت چپ آن قرار دهید.

# sed '/./ =' data.txt | sed '/./ {N;s/\n/\t/;}'


3 This is line number: #3. line 1 and 2 is empty
4 This is line number: #4
5 This is line number: #5
6 This is line number: #6
7 This is line number: #7

9 This is line number: #9
10 This is line number: #10


13 This is line number: #13 . Note that line number 14 is empty


مثال ۵)  تعداد کل خط های یک فایل را برگردانید. (مشابه دستور wc -l)

# sed -n '$ =' data.txt
14

مثال ۶)  دستور nl -ba را به صورت دقیق با sed پیاده سازی کنید.

#  sed '=' data.txt  | sed 'N;s/^/     /;s/ *\(.\{6,\}\)\n/\1\t/'
1
2
3 This is line number: #3. line 1 and 2 is empty
4 This is line number: #4
5 This is line number: #5
6 This is line number: #6
7 This is line number: #7
8
9 This is line number: #9
10 This is line number: #10
11
12
13 This is line number: #13 . Note that line number 14 is empty
14

برای بررسی صحت عملکرد ، خروجی این دستور و نیز خروجی دستور nl -ba را با استفاده از diff و همچنین ls -l  با هم مقایسه می کنیم.

# nl -ba data.txt >data.txt.nl
# sed '=' data.txt | sed 'N;s/^/ /;s/ *\(.\{6,\}\)\n/\1\t/' >data.txt.sed
# diff data.txt.nl data.txt.sed
# ls -l data.txt.*
-rw-rw-r-- 1 mohsen mohsen 406 Jan 29 19:32 data.txt.nl
-rw-rw-r-- 1 mohsen mohsen 406 Jan 29 19:32 data.txt.sed


همانطور که مشاهده می کنید دستور diff هیچ گونه اختلافی را نشان نمی دهد و دستور ls هم موید تعداد دقیق کاراکترهای دو فایل است که البته ملاک اصلی یکسان بودن دو فایل دستور diff می باشد و نه برابری تعداد کاراکترهای دو فایل!

مثال ۷)  عدد ۱۶۴۸۱۹۵ و یا به طور کلی هر عدد را سه رقم سه رقم با , از هم جدا کنید.

# echo 1648195 | sed ':a s/\(.*[0-9]\)\([0-9]\{3,\}\)/\1,\2/;ta'
1,648,195

دستور t که ابتدای کلمه test می باشد به این معناست که  چنانچه آخرین دستور s محتوای pattern space را تغییر داده باشد کنترل را به label داده شده در جلوی t منتقل می کند . در صورت عدم وجود label کنترل به انتهای دستورات sed منتقل می شود.

مثال ۸)  کلیه خطوط را در فضای ۷۹ کاراکتری راست چین کنید.

# sed ':a s/^.\{1,78\}$/ &/; ta' data.txt


This is line number: #3. line 1 and 2 is empty
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7

This is line number: #9
This is line number: #10


This is line number: #13 . Note that line number 14 is empty


مثال ۹)  کلیه خطوط را در فضای ۷۹ کاراکتری وسط چین کنید.

# sed ':a s/^.\{1,77\}$/ & /; ta' data.txt


This is line number: #3. line 1 and 2 is empty
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7

This is line number: #9
This is line number: #10


This is line number: #13 . Note that line number 14 is empty


مثال ۱۰)  هر خط را با خط بعدی یکی کرده و با یک فاصله از هم جدا کنید.

# sed 'N;s/\n/ /' data.txt

This is line number: #3. line 1 and 2 is empty This is line number: #4
This is line number: #5 This is line number: #6
This is line number: #7
This is line number: #9 This is line number: #10

This is line number: #13 . Note that line number 14 is empty

...:::... محسن ...:::...
۰۹بهمن

در تمام مثال های این بخش دستورات sed را بر روی محتوای این فایل اعمال می کنیم :


# cat data.txt
This is line number: #1
This is line number: #2
This is line number: #3
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7
This is line number: #8
This is line number: #9
This is line number: #10
This is line number: #11
This is line number: #12
This is line number: #13


مثال ۱)  ابتدا و انتهای هر خط را با کاراکترهای > و < علامتگذاری کنید .


# sed 's/^/</;s/$/>/' data.txt
< This is line number: #1>
<This is line number: #2>
< This is line number: #3>
< This is line number: #4>
<This is line number: #5>
<This is line number: #6 >
<This is line number: #7>
< This is line number: #8 >
<This is line number: #9>
<This is line number: #10>
<This is line number: #11>
< This is line number: #12 >
<This is line number: #13>


همانطور که مشاهده می کنید در ابتدای خطوط ۱ و ۳ و ۴ و ۸ و ۱۲ و انتهای خطوط ۶ و ۸ و ۱۲ تعدای فضای خالی یا کاراکتر space قرار دارد.


مثال ۲)  یک خط خالی زیر هر خط اضاقه کنید :


# sed 'G' data.txt
This is line number: #1

This is line number: #2

This is line number: #3

This is line number: #4

This is line number: #5

This is line number: #6

This is line number: #7

This is line number: #8

This is line number: #9

This is line number: #10

This is line number: #11

This is line number: #12

This is line number: #13


دستور G که ابتدای کلمه Get می باشد یک n\ به pattern space اضافه می کند و سپس محتوای hold space را به انتهای pattern space اضافه می کند. در اینجا چون hold space خالی است بدین صورت زیر هر خط تنها یک خط خالی چاپ می شود.

مثال ۳)  یک خط خالی بالای هر خط اضافه کنید:

# sed 'x;p;x' data.txt

This is line number: #1

This is line number: #2

This is line number: #3

This is line number: #4

This is line number: #5

This is line number: #6

This is line number: #7

This is line number: #8

This is line number: #9

This is line number: #10

This is line number: #11

This is line number: #12

This is line number: #13

دستور x محتوای pattern space و hold space را با هم تعویض یا exchange می کند .

مثال ۴)  یک خط خالی زیر و یک خط خالی بالای هر خط اضافه کنید.

# sed 'x;p;x;G' data.txt

This is line number: #1


This is line number: #2


This is line number: #3


This is line number: #4


This is line number: #5


This is line number: #6


This is line number: #7


This is line number: #8


This is line number: #9


This is line number: #10


This is line number: #11


This is line number: #12


This is line number: #13


مثال ۵)  فضاهای خالی ابتدای هر خط را حذف کنید.

# sed 's/^[ \t]*//' data.txt
This is line number: #1
This is line number: #2
This is line number: #3
This is line number: #4
This is line number: #5
This is line number: #6
This is line number: #7
This is line number: #8
This is line number: #9
This is line number: #10
This is line number: #11
This is line number: #12
This is line number: #13

مثال ۶)  فضاهای خالی انتهای هر خط را حذف کنید. برای بررسی صحت انجام دستور انتهای خط را با کاراکتر < مشخص کنید.

# sed 's/[ \t]*$/>/' data.txt
This is line number: #1>
This is line number: #2>
This is line number: #3>
This is line number: #4>
This is line number: #5>
This is line number: #6>
This is line number: #7>
This is line number: #8>
This is line number: #9>
This is line number: #10>
This is line number: #11>
This is line number: #12>
This is line number: #13>

مثال ۷)  فضاهای خالی ابتدا و انتهای هر خط را حذف کنید. برای بررسی صحت انجام این دستور ( حذف فضای خالی انتهای خطوط‌ ) محتوای هر خط را بین کاراکترهای > و < محصور کنید.

# sed 's/^[ \t]*/</;s/[ \t]*$/>/' data.txt
<This is line number: #1>
<This is line number: #2>
<This is line number: #3>
<This is line number: #4>
<This is line number: #5>
<This is line number: #6>
<This is line number: #7>
<This is line number: #8>
<This is line number: #9>
<This is line number: #10>
<This is line number: #11>
<This is line number: #12>
<This is line number: #13>

مثال ۸)  ۵ کاراکتر < را به ابتدای تمامی خطوطی که با space شروع نمی شوند اضافه کنید.

# sed '/^[ \t]/ !s/^/>>>>>/' data.txt
This is line number: #1
>>>>>This is line number: #2
This is line number: #3
This is line number: #4
>>>>>This is line number: #5
>>>>>This is line number: #6
>>>>>This is line number: #7
This is line number: #8
>>>>>This is line number: #9
>>>>>This is line number: #10
>>>>>This is line number: #11
This is line number: #12
>>>>>This is line number: #13

مثال ۹)  خطوط ۵ تا ۸ را نمایش دهید.

# sed -n '5,8 p' data.txt
This is line number: #5
This is line number: #6
This is line number: #7
This is line number: #8

توجه داشته باشید sed به صورت طبیعی بعد از اتمام هر سیکل محتوای pattern space را بر روی خروجی استاندارد می نویسد لذا با استفاده از سوییچ n- این حالت را غیر فعال می کنیم و به جای آن در دستوری که به sed می دهیم می گوییم که فقط در خطوط 5 تا 8 با استفاده از دستور p محتوای pattern space را بر روی خروجی استاندارد چاپ کند.

مثال ۱۰)  خط شماره 4 را نمایش دهید.

# sed '4 !d' data.txt
This is line number: #4

دستور d که ابتدای کلمه delete می باشد محتوای pattern space را کاملا پاک می کند. هنگامی که  pattern space کاملا خالی شود سیکل فعلی متوقف می شود و چون pattern space خالیست هیچ چیزی بر روی خروجی استاندارد نوشته نمی شود و سیکل بعدی ( خواندن خط بعدی) و اجرای لیست دستورات از ابتدا برای خط جدید آغاز می شود.  در مثال بالا به sed می گوییم خط ۴ را delete نکن یعنی اینکه مابقی خطوط را delete کن ! و به این صورت تنها خط ۴ نمایش داده می شود.
...:::... محسن ...:::...