إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

The Sed Command Series

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • The Sed Command Series

    السلام عليكم
    اخباركم ايه
    ده الجزء الاول في ال sed toutroial
    الدرس مهدي الي -cyberray - وحشتنا ياعم و linuxer
    و Raiden و لجورس كله لان في ناس كتير عايز اكتبها بس لو كتبتها اقروا الاهدء وانسوا الموضوع و ل MySQL وlinuxac.org كله
    مقدمة ::
    sed > stream editoer
    وهو عباره عن محرر نصوص غير تفاعلي noninteractive ده لانك بتطبق اوامر علي ال text او النص الي انت شغال عليه
    طرقة عمله::::
    البرنامج بيقري سطر سطر من الملف وبيحط السطر الاول في الذاكره وبينفذ عليه الاوامر ويرجعه تاني متعدل ويكرر علي السطر التاني لحد ما يخلص
    وال outpout في الغالب هو ال screen الا لو انت قلتله يطلع في ملف باستخدام w او < وحيتشرح باذن الله
    امر التبديل ...... the substitute command
    ال option هو s كالتالي
    الصيغه العامه

    كود:
    sed 's /<old>/<new>/'

    كود:
    echo storm man is here | sed 's /storm/ahmed/'
    طبعا انا هنا استخدمت ال pipe لاني مش محددله ملف فبالتالي هيكون هو ك argument لل echo مفهوم
    طبعا النتيجه حيتغير storm الي ahmed
    طيب لو ملف ؟؟

    كود:
    sed 's /storm/ahmed/' storm
    بافتراض ان الملف storm بيحتوي علي الجمله الي انا كتبتها فوق
    اوك سعاتك عايز تطلع الناتج في ملف زي ماقلت فوق
    <
    حيبقي

    كود:
    sed 's/storm/ahmed/'storm>storm2
    طيب جرب تحط الكلام ده في ملف
    storm hackobacko storm linuxer storm cyberray
    واعمل

    كود:
    sed 's/storm/ahmed/'storrm >storm2
    واعرض الملف
    تلاقيه عمل بس اول storm الي ahmed لان ال sed بيعمل تغير لاول حاجه يقابلها ويقوم مخلص لان احنا قلنا حينقل علي السطر التاني اكيد
    طيب الحل هنا استخدام ال global وديت ال option بتاعها g
    كود:
    sed 's/storm/ahmed/g'storm>storm2
    كده احنا وصلنا للي عازينه
    طيب سعاتك في اكتر من modifay عايز تعمله اكتر من تعديل يعني مش معقول حتقعد تكتب الامر 100 مره علي حسب الي عايز تعدله
    يبقي في اكتر من حل
    الحل الاول
    : استخدام ال e- تمام
    كود
    كود:
    sed -e 's/storm/ahmed/g' -e 's/hackobacko/linuxman/g'storm>storm2
    ممله جدا عمال تكتب e- e- e- وزهقت
    جرب ال فاصله المنقوطه كالاتي
    ملحوظه:
    الفاصله المنقوطه يجب ان تكون اول مايقابل ال / يعني مينفعش بعيدها مسافه

    كود:
    sed 's/storm/ahmed/; s/linuxer/bro/;g'storm>storm2
    تمام نيجي بقي للاحسن من كل ده انت عارف اننا بنستخدم ال ' ' عشان نحدد الكلام الي sed حيستقبله مظبوط
    طيب اعمل الاتي
    كود:
    sed '
    واتك انتر
    حتلاقي ظهرلك علامه في الغالب > وكمل الاوامر كالاتي
    كود
    كود:
    s /storm/ahmed
    s /hackobacko/linux ' storm >storm2

    طبعا الامر sed مقفلش المجموعه من الاوامر غير لما قابل ال ' قدامه
    طيب عندك ملف كالاتي
    mysweety gone
    mysweety gone
    linux gone
    ahmed gone
    storm gone
    وانت مش عايز تغير كلمة gone لكله انت محدد كلمات عايز تغيرها

    كود:
    sed '/mysweety/ s/gone/not here/' storm >storm2
    كل كلمة تحمل mysweety الي قدامها حيتغير من gone الي Not here طبعا انت ممكن تعمل اكتر من تعديل زي ماقلنا فوق
    طيب نيجي بقي لاستخدام حلو
    انت معاك ملف فيه مجموعه من الاوامر ل sed وليكن مثلا السكريبت بتاع سفاح احنا بس حناخد الي هو عايز يغيرها ونعدل عليها لينا زي الاتي

    كود:
    s/safe_mode = Off/safe_mod = On
    الف شكر لسفاح
    احنا عارفين ان ديت عايزه تتغير في ملف ال php.ini ومستتقلين نكتبها وهي موجوده في ملف لوحدها بالطريقه ديت
    كل الي عليك الاتي

    كود:
    sed -f script  /usr/local/lib/php.ini > /usr/local/lib/php.ini.new
    استخدمنا f- بدل مانكتب ال

    كود:
    s/safe_mode = Off/safe_mod = On
    مفيده في حاجه حلوه الي هي لو انت بتعدل في حاجات كتير قويييييي ممكن تدمجها في ملف واحد زي ماعملنا بدل ماتتعزب في ال shell
    طيب لو سعاتك عايز تححد رقم السطور الي عايز تعدل فيها
    نرجع للمثال ده
    mysweety gone
    mysweety gone
    linux gone
    ahmed gone
    storm gone
    اسف طبعا علي العبط الي انا كتبه بس دماغي مش موصلاني لاكتر من كده نظرا للتفكير الي في دماغي دلوقتي blink.gif
    انت عايز تعدل السطر الرابع والخامس بس

    كود:
    sed '4,5 s/gone/not here/'
    طيب لو انت مش عايز تطلع اي حاجه علي الشاشه بس عايز تفنذ وخلاص
    تستخدم n- حقيقة هي لوحدها مش حتجدي اي نفع لوحدها من غير p وديت معناها print يعني اطبع المحدد فقط
    خلينا نشوف مثال علي n- لوحدها بس

    كود:
    sed -n 's/storm/ahmed/'>storm>storm2
    افتح الملف مش حتلاقي اي حاجه خااااااااااااااااالص
    طيب ايه يعني انا استفدت ايه انت استفدت انك ممكن تطبع الي انت محتاجه بس زي كده

    كود:
    sed -n 's/storm/ahmed/p'storm>storm2
    حيطبع فقط الي تم تعديله واظن ديت حاجه ممكن تفيد ناس كتير صح ؟!
    طيب لو كله الا السطرين دول
    كود
    كود:
    sed -n 's/storm/ahmed/!p'storm>storm2
    لاحظ انا استخدمت ! علامه النفي not مفهوم
    طيب نيجي للحذف انت في كلمه عايز تحذها سهله اعمل الاتي

    كود:
    sed 's/storm//g'storm>storm2
    كل كلمات الي باسم storm راحت مع الرياح laugh.gif
    عقبالنا يارب unsure.gif
    سعاتك مش مبسوط كده هو بيمسحلك اي حاجه في storm ومنتاش عايز كده انت عايزه يمسح الي بيبتدي ب storm نيجي بقي للبتوع دول $ ^ انا بسميها مؤشرات تحديد انت سميها زي ماتسميها

    كود:
    sed s/$storm/ahmed'storm>storm2
    فقط اذا كان السطر ينتهي ب storm

    كود:
    sed s /^storm/ahmed'storm>storm2
    فقط اذا كان يبتدي ب storm
    طيب لو السطر ال 5 او السادس بس ويكون بيبتدي ب storm

    كود:
    sed '5,6 s/^storm/ahmed/g'storm>storm2
    وده يذكرني باضافه في الجريب
    كود
    كود:
    grep -r '$storm' *
    grep -r '^storm' *
    واضحه اظن
    بالمناسبه دمج ال ^$ يشكل سطر فاضي يعني لو انت جيت حذفت السطر الفاضي
    كود
    كود:
    sed '/^$/ d' storm >storm2
    وده يجبلنا امر جديد d يعني delete قشطه
    طبعا s مش موجود لان s امر استبدال حتسبدل وتحذف ياخبر انا خلاص هييست
    :thumpsup_green:
    مثلا انت عايز تحذ السطر الي فيه اي كلمة اسمها storm >مخنوق منه tongue.gif
    كود
    كود:
    sed '/storm/d' storm >storm2
    تمام طبعا انت عرفت تحديد رقم السطور وعرفت البدايه والنهايه ولو معرفتش :angry_red:
    كود
    كود:
    sed '/$storm/d'storm>storm2
    يحذف الي بينتهي ب storm

    كود:
    sed '/^storm/'d'storm>storm2
    سعاتك بقي عايز تعدل سطر كامل هنا s مش هو الي انت عايزه لاده c cool.gif
    شوف الاتي
    كود
    كود:
    sed '/^storm/ c\ ahmed is realy sad and storm is realy crazy ' storm >storm2
    مع c مش حنستخدم / لا حنستخدم backslash \
    اخر حاجه في الجزء ده ال append او الدمج
    ال option هو a

    كود:
    sed '^a \ i am sllepy man ' storm >storm2
    طبعا حيضيف في بداية الملف ولو في النهايه
    ايوه شاااطر

    كود:
    sed '$a \ i am sllepy man ' storm >storm2
    ولو بعد السطر الثالث

    كود:
    sed '3a \ i am sllepy man ' storm >storm2
    لكن لو في مكان السطر الثالث مش حيبقي a حيبقي i ك insert لان ال a بيدور علي بدايه بعد المكان المحدد

    كود:
    sed '3i \ i am sllepy man ' storm >storm2
    خلاص كلمه كمان ودمت
    عارف الامر head الي بيطبعلك اول 10 سطور من ملف معين
    q الي حد ماشببهه لانك ممكن تخليه يعدل لحد حد معين من التعديلات زي كده

    كود:
    sed 's /1/2/5q'storm>storm2
    طبعا هي بعد 5 تعديلات حيطلع
    السبب بقي الي خلاني اقول انه شبه head انه ممكن تعمل كده
    كود
    كود:
    sed 100q storm
    حيقري اول 100 سطر بس
    واظن بعد كمية اسم storm الي اتذكرت في الموضوع احب اوضح حاجه ده مش حب ذات بس لان الكلمه لها معني خاص في حياتي
    اشوف وشكم في الجزء التاني لو فضلت عايش اساسا ههههه
    اعتزر عن اللهجه المصريه وسوف اقوم بتعديله:gotcha:
    c u all cheers
    BOOOF , I AM GONE
    Still , you gotta wait for my PRESENT :D
    C programming arabic Tutorial|Programming-fr34ks

  • #2
    part 2

    يا قمت ببعض التعديلات وتلاشي الاخطاء ومن اهمها مشكلة اللغه بالتاكيد
    يهدي اليSOFY SG LINUXER CYBERRAY ACID PIONERوكل من اعطاني دفعه في الموضوع السابق
    لنبدا بالدرس::::
    لمن نقم فيما سبق بتعريف كلمة stream edtior هل لاحظت في الموضوع الاسبق العباره التاليه

    كود:
    echo storm man says i love SG | sed 's/storm/ahmed/g'
    ال sed هو محرر نصوص غير تفاعلي كما قلنا ولكن لم يسبق القول انه يمكن التعامل معه بدون ملفات نصيه
    اي انك لاتحتاج الي تمريير ملف نصي اليه لكي يتعامل بل يمكن تمرير سيل البيانات stream اليه عن طريق انبون pipe او data pipe بالتحديد
    وه>ه هي وظيفة | كما نعرف
    اولا ال: regular expressions
    لكي نطلع علي الصوره العامه هي نوعان basic و extented الاخري تستعمل في بعض الاوامر الثانيه ك egrep و awk وبالتالي حين يحين وقت awk سوف نتطرق الي النوع الثاني
    الان نحن نتحدث عن BASIC :::
    كمثال : $ ^ تعرضنا اليهم فيما سبق
    ولكن لنتوسع قليلا فيهم :
    متي يصبح كل منهم غير فعال في وظيفته .؟ تتسال معني ه>ا الكلام معناه انه متي يمكنك ان تبحث عن كلمة اسمها مثلا
    كود:
    $storm
    كالاتي
    كود:
    sed 's/$storm/$ahmed/g'
    ولكن الم نقم من قبل بتعريف $ علي انه علامه لتحيد نهاية السطر ولكن تلك المره لم تاتي ك نهاية سطر لانها لم تاتي في موضوعها لصحيح
    اي ليس في نهاية الكلمه
    ويمكنك فعل >لك
    كود:
    sed 's/$storm$/$ahmed/g'
    قمنا بالتحديد $storm في اخر السطر وظن ان >لك مفهوم الان
    حسنا لو انك تريد مطابقة حروف او ارقام معينه في نص معين
    يمكنك ستخدام [] وبينهم ال>ي تريد مطابقته مثلا
    كود:
    sed 's/[a-z]hmed/storm/g'
    سوف يقوم بالاتي يبحث عن اي كلمة تحتوي حرف من a الي z ويليها الحروف التاليه hmed اي يمكن ان تكون ahhmed او bhmed ......
    او انك تريد مطابقة كلمه تحتوي علي ارقام

    كود:
    sed's/[0-9]12/some one number/g'
    بقوم بالبحث عن رقم بين 0 و 9 ويليه 12 اي يمكن ان يكون 012 او 112 او 212 ........
    ويمكنك ان تقوم بالاتي
    كود:
    sed -n '/^S[a-z]orm$/ahmed/p'
    قمنا بمعرفة وظيفة -n و p في الجزء السابق
    حسنا هنا نحن وضعنا المراد البحث عنه وتبديله بين $ ^ مما يشكل سطر كاااااااااااامل اي انه سوف يقوم بمطابقة اي سطر يحتوي علي S ويليه حرف a to z وبعديه torm مفهوم .
    لناخ> علامه جديده وهي * تلك العلامه تقوم باخبار sed بان النص ال>ي يسبقها يمكن ان يتكرر 0 او اكثر منه مره الي ما لانهايه
    لاحظ انه لايمكنك من خلالها تحديد عدد المرات التي تريد تكرارها

    كود:
    sed -n '/^#[[:space:]]*\//,/per$l/p'
    لنشرح ه>ا المثال المعقد جدااااااااااااااااااااااااااااااااااااااااا
    كل مافي الامر حدوث التالي
    عدم طباعة اي شيئ سوي ماتم تحديده ل سثي بواسطة n- ثم اي سطر يبتداء ب # يليه اي عدد من المسافات ثم يليه / وه>ا هو الفصل الاول
    مما ياتي بنا الي ملاحظه اخري انه يمكن فصل اكتر من تعبير regular expression بواسطة , ثم الجزء الثاني وهو اي سطر ينتهي ببيرل
    قم ما>ا سيحدث الناتج هو التالي ا>ا قمت بالتطبيق علي سكريبت بيرل
    كود:
    # / usr/bin/ perl
    لطن افصل بين # وusr بمسافه في الاسكريبت وه>ه هي [[:space:]] اي اي مسافه او tap وقمنا باستخدام * للدلاه علي انه يمكن تكرارها اكثر من مره واستخدمنا \/ للغرض ان نقوم بالهروب من / انت تعلم انه في كثير من الغات يتم ستخدام "\ لطباعة " او /\ لطباعة / وهكذا
    وهناك ملحوظه اخري فصل التعبيرين ب, يشترط شيئ انه ا>ا تحققت التعبير الاول والتعبير الثاني يتم استخراج البايانات اذا لم يتحقق اي منهما لايحدث شيئ
    ويمكن تصوير ذلك ب
    كود:
    if(reg1 is true)
    }
    if (reg2 is true)
    }
    print data
    {{
    else
    }
    print nothing
    {
    اظن انك فهمت الان
    حسنا انت تريد تحديد عدد معين من المرات كاقل حد وعدد معين من المرات كاقص حد للعباره المراد البحث عنها او تغيرها
    معامل جديد وهو

    كود:
    \{\}
    ولكن هنا \ ليست اشارة هروب لنه بدونها لن يكون المعامل معامل صحيحا وايضا ا>ا جاء المعامل منفردا فلاقيمة له وا>ا جاء قبل النص لاقيمة له كالاتي

    كود:
    sed -n '\{5,4\}/p'
    '
    يقوم بمطابقة اي {5,4} وايضا

    كود:
    sed-n' /{5,4}storm/p'
    يقوم بمطابقة {5,4}storm
    اظن لنك فهمت
    لانتي للاستخدام الصحيح والصوره العامه له هي {mini,max} كالاتي

    كود:
    sed-n' /storm\{1,4\}/p'
    ا>ا تكرر storm كاقل حد مره وحده وكاقصي حد 4 مرات يتم طبعاة الناتج
    ويمكنك استخدامه بدون حد ادني او بدون حد اقصي كالاتي
    كود:
    \{,5\}
    كاقصي حد 5 مرات او
    كود:
    \{5\}
    كاقل حد 5 مرات
    الجزء القادم باذن الله سوف نتطرق الي البرمجه ب sed
    ومعرفة قوة sed الحقيقيه ولكن ليس الان نظرا للظروف الدراسه
    اتمني ان يحوز المضوع علي اعجابكم واظن اني قصرت في كتابة هذا المضوع قليلا لكن صدقا لم استطع ان اكمل الباقي
    c u all
    cheers
    التعديل الأخير تم بواسطة St0rM-MaN; الساعة 03-02-2007, 04:24 PM.
    BOOOF , I AM GONE
    Still , you gotta wait for my PRESENT :D
    C programming arabic Tutorial|Programming-fr34ks

    تعليق


    • #3
      مش عندى غير رائع رائع جدا ياستورم ... اسلوب واضح وبسيط ومليان معلومات حول sed
      بس الأفضل إنك تبقى تكتب ال Output بتاع كل امر ... عشان يبقى الموضوع لحظى .. مش يحتاج إنه يتجرب كتير
      Programming-Fr34ks[dot]NET
      Ma Weblog
      ابدأ بتعلم Python | Ruby
      كتاب البايثون متوافر الآن
      لا اتواجد بهذا المنتدى ... للإتصال

      تعليق


      • #4
        سليم يالينكسر بس مش حيخسر حاجه انه يكتب الاوامر عشان حفظها ولا ايه
        BOOOF , I AM GONE
        Still , you gotta wait for my PRESENT :D
        C programming arabic Tutorial|Programming-fr34ks

        تعليق


        • #5
          جميل ياستورم ...رأيك مقنع

          نسيت اشكرك ع الأهداء
          Programming-Fr34ks[dot]NET
          Ma Weblog
          ابدأ بتعلم Python | Ruby
          كتاب البايثون متوافر الآن
          لا اتواجد بهذا المنتدى ... للإتصال

          تعليق


          • #6
            اخي ستورم
            اشكر لك هذا الدرس ولكن للاسف لم استطع المتابعة بسبب اللهجة المستخدمة
            اكون لك من الشاكرين لو تمت صياغته مرة اخرى بدون استخدام اللهجة العامية
            وانا في شوق لقرائته مرة اخرى
            تحياتي وارجوا ان ﻻ اكون قد ازعجتك بكلامي
            تحياتي
            http://www.no4denmark.com/ar/images/...sool-allah.gif
            ((لا يومن احدكم حتى اكون احب اليه من والده وولده والناس اجمعين))......اعادوا نشر الصور فاعدنا اكل الزبدة والجبنة...

            تعليق


            • #7
              لينكسر شكرك وصل لانك رديت ع الموضوع بس ياعسل
              اخي العزيز raptor سوف احاول قدر المستطاع
              تحياتي
              BOOOF , I AM GONE
              Still , you gotta wait for my PRESENT :D
              C programming arabic Tutorial|Programming-fr34ks

              تعليق


              • #8
                يعطيك العافية درس جميل وقد يكون الكثير وأنا منهم يجهل استخدام هذا البرنامج بشكل تفصيلي كما ذكرت جزاك الله خيرا لكن أضم صوتي لصوت اﻷخ raptor
                فأرجو من جميع اﻷخوة جزاهم الله خيرا عند كتابة الدروس خصوصا
                أن يكتبوها بلغة أقرب إلى الفصيحة حتى يستفيد منها الجميع فهذا مجتمع
                اللينكس العربي
                أيضا الكتابة باللهجة العامية يضيع الجهود ﻷنه من الصعب نقله إلى أماكن
                أخرى
                أنا لاأطالب بأن يتحول الشخص إلى سيبويه عند كتابة الدروس ولكن المطلوب
                عدم الإيغال في العامية ، أرجو تقبل هذا الرأي .
                التعديل الأخير تم بواسطة أبو زياد; الساعة 04-02-2007, 12:15 PM.
                سبحان الله و بحمده سبحان الله العظيم
                قلها ولا تحرمني وإياك الأجر

                تعليق


                • #9
                  أنا لاأطالب بأن يتحول الشخص إلى سيبويه عند كتابة الدروس ولكن المطلوب
                  عدم الإيغال في العامية ، أرجو تقبل هذا الرأي .
                  ههههههههههههههههههههههه
                  اولا الف شكر علي رايك الجميل
                  ثانيا مين سيويه ده؟؟؟؟
                  والاهم حاضر والله ححاول
                  الف شكر
                  BOOOF , I AM GONE
                  Still , you gotta wait for my PRESENT :D
                  C programming arabic Tutorial|Programming-fr34ks

                  تعليق


                  • #10

                    جزاك الله خيرا على تقبل هذا الرأي بصدر رحب .
                    سيبوية هو عالم النحو الشهير
                    سبحان الله و بحمده سبحان الله العظيم
                    قلها ولا تحرمني وإياك الأجر

                    تعليق


                    • #11
                      تم النقل هنا شباب لانه لايتعلق بالبرمجه
                      علي الاقل حاليا
                      BOOOF , I AM GONE
                      Still , you gotta wait for my PRESENT :D
                      C programming arabic Tutorial|Programming-fr34ks

                      تعليق


                      • #12
                        موضع جميل تشكر عليه

                        تعليق


                        • #13
                          موضوع روعة يا شباب

                          بس المسألة اللي محتاجة إضافة هي كيف يتعامل sed مع المتغيرات variables

                          و الف شكر للكاتب
                          لا تصطد لي سمكة ، بل علمني كيف اصطاد سمكة :wink:

                          تعليق

                          يعمل...
                          X