كيفية استخدام Sed في Linux لمهام Shell الأساسية

Sed هو برنامج UNIX بسيط. لا يقوم بإنشاء أو تعديل الملفات بل يقوم فقط بتعديل البيانات التي تمر من خلال مدخلاته ويقدم البيانات المعدلة على مخرجاته. على الرغم من ذلك ، تعتبر sed واحدة من أقوى أدوات UNIX التي ستواجهها على نظام Linux ، خاصةً عند دمجها مع برامج أخرى على نظامك.
تهدف هذه المقالة إلى تعليم أساسيات استخدام هذا البرنامج الصغير. بالإضافة إلى ذلك ، سيقدم أيضًا لمحة موجزة عن فلسفة UNIX وكيف أن هذه الفكرة مهمة لفهم كيفية عمل جهاز الكمبيوتر الخاص بك.
اقرأ أيضا:أفضل 5 توزيعات Linux-Libre من أجل أمان أفضل
ما هي فلسفة يونيكس؟
فلسفة UNIX هي فكرة أن البرنامج يجب أن يقوم بمهمة واحدة فقط ويقوم بها بشكل جيد. يشجعك على كتابة برامج بسيطة يمكنك إعادة استخدامها لوظائف مختلفة بدلاً من إنشاء برامج معقدة لا يمكنك إعادة استخدامها في مهام أخرى.
خير مثال على ذلك هو البرنامج cat
. هذه أداة مساعدة بسيطة تأخذ المدخلات وتطبعها كتدفق نصي.

تتيح لك فلسفة UNIX استخدام البرنامج مع أدوات النظام الأخرى. في المقابل ، ينشئ هذا الأسلوب في النهاية واجهة واحدة لنظامك يمكنك تعلمها مرة واحدة وإعادة استخدامها في سياقات مختلفة.
على سبيل المثال ، يمكنك إرسال دفق دردشة إلى برنامج مثل grep
. هذا برنامج بسيط يفعل شيئًا واحدًا فقط. يبحث عن سلسلة نصية في الإدخال ويطبع الأسطر التي يظهر فيها هذا النص.

من ناحية أخرى ، يمكنك بدلاً من ذلك إرسال دفق الدردشة نفسه إلى ملف شاشة بيجر مثل less
. سيسمح لك هذا بدوره بالتمرير عبر الدفق كما لو كان ملفًا نصيًا واحدًا.

كيف يعمل SED؟
ومع ذلك ، فإن sed هو برنامج يقرأ دفقًا من النص ويعدله. ومع ذلك ، فإن sed يقوم فقط بتعديل تدفق النص ، مما يعني أنه لا يقوم بتعديل الملفات الموجودة على جهاز الكمبيوتر الخاص بك بشكل مباشر. قد يكون هذا محيرًا للمبتدئين لأن أي تغييرات تجريها على sed لن تظهر على القرص.
على الرغم من ذلك ، تظل sed أداة قوية. على سبيل المثال ، يمكنك تنفيذ السطر التالي لقراءة إخراج printf
أمر:
printf "hellonmaketecheasiernworldn" | sed n

أساسيات استخدام Sed
بمعرفة هذا ، من السهل جدًا استخدام sed للمهام الأساسية. ضع في اعتبارك المثال التالي:

في هذا استخدمت ملف n
أمر لطباعة محتويات ملف “hello”.
1. اختيار وتقسيم تيارات النص
بالإضافة إلى ذلك ، يمكنك أيضًا إخبار sed بتعديل تدفق النص هذا. على سبيل المثال ، يمكنك استخدام ملحق 2q
أمر لإخباره بطباعة أول سطرين فقط من ملف “hello”:

يمكن أن يكون هذا مفيدًا للغاية إذا كنت تريد فقط الحصول على الأسطر الأولى من ملف نصي. ومع ذلك ، يمكنك أيضًا استخدام ملف p
أمر لإخبار sed بطباعة مجموعة من الأسطر فقط إلى ملف.

في المثال أعلاه ، استخدمت sed لطباعة السطرين الثالث والرابع من ملف “hello”. يمكنك أيضا استخدام نفس الشيء p
أمر لطباعة سطور غير متجاورة في ملفك النصي. خذ بعين الاعتبار المثال التالي:

بهذا ، أقول لـ sed أن تطبع فقط السطر الأول والرابع من ملف “hello”. يمكن أن يكون هذا مفيدًا إذا كنت تريد دمج عدة سطور من تدفقات مختلفة في ملف واحد.
على سبيل المثال ، يمكنك استخدام sed مع الامتداد >
العامل لكتابة الدفق المعدل إلى ملف.
sed -n 1~4p hello.txt > welcome.txt

2. حذف النص
وظيفة أخرى رائعة لـ sed هي حذف النص في الدفق. بخلاف الطباعة ، يتيح لك هذا تحديد سطور النص التي تريد حذفها من الدفق.
على سبيل المثال ، استخدمت ملف d
أمر لحذف السطر الثاني والخامس من ملف hello.

ومن مزايا استخدامه بدلاً من p
الأمر هو أنه يسمح لك بحذف الصف الذي لا تريده فقط. يكون هذا مفيدًا إذا كنت تريد تنظيف ملف كبير أو تقليم الإخراج لإظهار المعلومات التي تحتاجها فقط.
3. إضافة نص جديد
باستخدام هذا ، يمكنك أيضًا استخدام sed مع نفسه لتضمين بيانات جديدة في دفق النص الخاص بك. على سبيل المثال ، يمكنك استخدام ملحق a
أمر لإضافة سطر نصي إلى التدفق الحالي:
sed -n 2p hello.txt | sed a "this is a new line"

بالإضافة إلى ذلك ، من الممكن أيضًا تضمين ملفات كاملة في تدفق نصي. للقيام بذلك ، يمكنك استخدام ملف r
الأمر الذي سيسمح لك بتشغيل ملف واحد في التدفق الحالي. للقيام بذلك ، يمكنك تشغيل الأمر التالي لتضمين ملف الترحيب بعد السطر الثاني من hello.
sed -n 2p hello.txt | sed rwelcome.txt

4. استبدال النص ومعالجة التدفق
الاستخدام الرائع لـ sed هو تعديل التدفقات الحالية. إنه عندما تأخذ دفق إدخال النص وتستخدم الوظائف المضمنة في sed لتعديل محتوى الدفق.
يمكن القول إن هذه هي أقوى وظيفة لـ sed. يمنحك هذا القدرة على تغيير البيانات ديناميكيًا أثناء مرورها عبر القنوات. على سبيل المثال ، يمكنك بسهولة تعديل إخراج البرنامج كما لو كان ملفًا نصيًا:
printf "hellonmaketecheasiernworldn" | sed s/world/website/

في هذا المثال ، استخدمت ملف s
أمر لاستبدال كلمة “world” بكلمة “website”. على عكس الأوامر السابقة ، يستخدم هذا الأمر صيغة محددة للعمل بشكل صحيح.
مع العلم بهذا الشكل العام لـ s
الأمر يشبه هذا:
s/[regex]/(string)/{options}
- يشير العمود الأول إلى أن هذا أمر تجاوز. في معظم الحالات ، تحتاج فقط إلى استخدام ملف
s
الأمر لتحرير دفق نصي. - يشير العمود الثاني إلى الكلمة التي تريد استبدالها باستخدام التعبيرات الهيكلية العادية. إنها طريقة لوصف الكلمات والقواعد باستخدام القواعد العامة. على سبيل المثال ، يمكنك وصف الكلمات “برينس” و “أمير” و “بريمير” بالكتابة
pri[n,m]..
. - يصف العمود الثالث الكلمة التي تريد أن تكون السلسلة القديمة. على عكس العمود السابق ، لا يستخدم هذا العمود التعبيرات العادية. بدلاً من ذلك ، يمكنك استخدام نص عادي لوصف كلمتك الجديدة.
- يخبر العمود الأخير sed أن يطبق أي خيارات إضافية تحتاجها للاستبدال. في هذا ، العلامة الأكثر شيوعًا التي قد ترغب في استخدامها هي
g
. يشير هذا إلى أن الأمر سيستبدل كل مثيل من regex بالسلسلة الجديدة.
5. استخدام استبدال النص مع الملفات
يمكنك تطبيق s
أمر لمعالجة أي نوع تريده من تدفق النص. هذا مفيد ليس فقط لأنه يسمح لك بتعديل البيانات بسرعة ، ولكن أيضًا لأنه يمكنك استخدامه مع أي شيء تقريبًا في سطر أوامر Linux.
على سبيل المثال ، يمكنك استخدام ملحق s
الأمر بملف نصي عن طريق إضافة اسم الملف إلى نهاية الأمر:
sed s/hello/welcome/ hello.txt

في هذا أقول لـ sed قراءة ملف “hello” واستبدال المثال الأول من كلمة “hello” بكلمة “welcome”. يمكنني بعد ذلك القيام بذلك لكل مثيل لكلمة “hello” في الملف عن طريق إضافة الامتداد g
اختيار:
sed s/hello/welcome/g hello.txt

أسئلة مكررة
هل من الممكن كتابة تغييرات على ملف باستخدام sed؟
نعم! إلى جانب استخدام عوامل تشغيل الملفات ، من الممكن استخدام sed لكتابة أي دفق نصي معدل إلى ملف مباشرةً. للقيام بذلك ، يمكنك إما استخدام sed مع ملف -i
الإبلاغ عن أو استخدام w
أمر لكتابة الدفق إلى ملف.
من الأمور المهمة التي يجب ملاحظتها ، مع ذلك ، أن هذه الأوامر لا تتوافق مع POSIX. هذا يعني أن هذه لن تعمل إذا كنت تستخدم نسخة من sed.
أحصل على خطأ “لم يكتمل” في كل مرة أستخدم فيها sed. هل التثبيت معطل؟
مُطْلَقاً! هذه مشكلة تحدث عندما تكتب أمر sed بشكل غير صحيح. هذا أمر شائع مع أوامر الاستبدال حيث تحاول مطابقة أو استبدال سلسلة بمسافات.
على سبيل المثال ، سيؤدي تشغيل الأمر التالي إلى ظهور خطأ “غير مكتمل”: sed s/hello/welcome back/g hello.txt
.
يمكنك حل هذه المشكلة عن طريق إضافة حرف الهروب “” قبل مسافاتك. هذا حرف خاص يخبر sed بتضمين المسافة عند البحث عن نص أو استبداله.
مع ذلك ، يبدو الإصدار الصحيح من الأمر أعلاه كما يلي: sed s/hello/welcome back/g hello.txt
.
بالإضافة إلى “g” ، هل هناك أي إشارات أخرى يمكنني استخدامها مع الأمر “s”؟
نعم! بعيدا، بمعزل، على حد g
يمكنك أيضًا استخدام ملف p
علم لإخبار sed بعرض جميع الخطوط المتغيرة.
علم آخر يمكنك استخدامه مع s
هو e
. يتيح لك هذا تشغيل أوامر الصدف كلما استبدلت sed كلمة. على سبيل المثال ، يمكنك تشغيل الأمر التالي للتشغيل touch
في كل مرة يجد فيها كلمة “hello” في الملف: sed s/hello /touch /e hello.txt
.
أخيرًا ، يمكنك أيضًا استخدام ملف i
علم لإخبار sed بأنه غير حساس لحالة الأحرف عند البحث عن التطابقات. هذا مفيد إذا كنت تريد مطابقة نفس الكلمة ولكن مع أنماط حالة مختلفة. على سبيل المثال ، سيستبدل الأمر التالي كلمة “hello” بكلمة “welcome” بغض النظر عن حالتها: sed s/HELLO/welcome/i hello.txt
.