كيفية التعامل مع السلاسل في Bash على Linux

إذا كان هناك شيء واحد يتمتع به Linux بشكل جيد، فهو الأدوات المساعدة للتعامل مع السلاسل. ولكن هناك مجموعة كاملة من الوظائف المضمنة مباشرة في غلاف Bash أيضًا. وإليك كيفية استخدامها.




التلاعب بالأوتار

يحتوي نظام Linux البيئي على أدوات رائعة للعمل مع النصوص والسلاسل. وتشمل هذه الأدوات awk وgrep وsed وcut. ولأي عمل يتعلق بالتعامل مع النصوص الثقيلة، يجب أن تكون هذه الأدوات هي الخيارات المفضلة لديك.

في بعض الأحيان، يكون من الملائم استخدام القدرات المضمنة في shell، وخاصةً عند كتابة نص برمجي قصير وبسيط. إذا كان النص البرمجي الخاص بك سيتم مشاركته مع أشخاص آخرين وسيتم تشغيله على أجهزة الكمبيوتر الخاصة بهم، فإن استخدام وظيفة Bash القياسية يعني أنك لست مضطرًا إلى التساؤل حول وجود أو إصدار أي من الأدوات المساعدة الأخرى.

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

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


إنشاء متغيرات السلسلة والعمل معها

كل ما نحتاجه لإعلان متغير وتعيين سلسلة له هو تسمية المتغير واستخدام علامة المساواة

= 

، وقم بتوفير السلسلة. إذا كانت هناك مسافات في السلسلة، فقم بلفها بين علامتي اقتباس مفردة أو مزدوجة. تأكد من عدم وجود مسافة بيضاء على أي من جانبي علامة التساوي.

my_string="Hello, How-To Geek World."

echo $my_string

إنشاء وكتابة متغير سلسلة

بمجرد إنشاء متغير، تتم إضافة اسم هذا المتغير إلى قائمة كلمات إكمال علامات التبويب في shell. في هذا المثال، يؤدي كتابة “my_” والضغط على مفتاح “Tab” إلى إدخال الاسم الكامل على سطر الأوامر.


متغيرات للقراءة فقط

هناك declare أمر يمكننا استخدامه لإعلان المتغيرات. في الحالات البسيطة، لا تحتاج إليه حقًا، لكن استخدامه يسمح لك باستخدام بعض خيارات الأمر. ربما يكون الأمر الذي ستستخدمه أكثر هو -r خيار (للقراءة فقط). يؤدي هذا إلى إنشاء متغير للقراءة فقط لا يمكن تغييره.

declare -r read_only_var="This is an immutable string!"

إذا حاولنا تعيين قيمة جديدة لها، فسوف تفشل.

read_only_var="A new string..."

فشل في تغيير متغير سلسلة للقراءة فقط

الكتابة في نافذة المحطة الطرفية

يمكننا كتابة عدة سلاسل في نافذة المحطة الطرفية باستخدام echo أو printf بحيث تظهر وكأنها سلسلة واحدة. ولا نقتصر على متغيرات السلاسل الخاصة بنا، بل يمكننا دمج متغيرات البيئة في أوامرنا.

user_account="Your user account is:"

echo $user_account $USER


كتابة سلسلتين في نافذة المحطة الطرفية كما لو كانتا سلسلة واحدة

ربط السلاسل

عامل الجمع والتساوي، +=يتيح لك “إضافة” سلسلتين معًا. ويسمى هذا التجميع.

user_account="Your user account is:"

user_account+=$USER

echo $user_account

ربط السلاسل باستخدام +=

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

user_account="Your user account is: "

user_account+=$USER

echo $user_account


إضافة مسافة إضافية قبل استخدام += لربط سلسلتين

ذات صلة: كيفية تعيين متغيرات البيئة في Bash على Linux

قراءة مدخلات المستخدم

بالإضافة إلى إنشاء متغيرات سلسلة تحتوي على محتوياتها المحددة كجزء من إعلانها، يمكننا أيضًا قراءة إدخال المستخدم في متغير سلسلة.

ال read يقرأ الأمر مدخلات المستخدم. -p يكتب خيار (prompt) موجهًا إلى نافذة المحطة الطرفية. يتم تخزين إدخال المستخدم في متغير السلسلة. في هذا المثال، يسمى المتغير user_file.

read -p "Open which file? " user_file

echo $user_file

قراءة سلسلة إدخال المستخدم


إذا لم تقم بتوفير متغير سلسلة لالتقاط المدخلات، فسيظل يعمل. سيتم تخزين مدخلات المستخدم في متغير يسمى REPLY.

read -p "Open which file? "

echo $REPLY

قراءة إدخال المستخدم دون توفير متغير سلسلة

عادةً ما يكون من الأفضل توفير متغيرك الخاص وإعطائه اسمًا ذا معنى.

التلاعب بالسلاسل

الآن بعد أن أصبح لدينا سلاسلنا، سواء تم تعريفها في وقت إنشائها، أو قراءتها من إدخال المستخدم، أو تم إنشاؤها عن طريق ربط السلاسل، يمكننا البدء في القيام بالأشياء بها.

العثور على طول السلسلة

إذا كان من المهم أو المفيد معرفة طول السلسلة، فيمكننا الحصول عليه عن طريق وضع علامة التجزئة قبل اسم المتغير “#” رمز.

my_string="There are 39 characters in this string."

echo ${#my_string}


الحصول على طول السلسلة

يمكننا استخراج سلسلة فرعية من متغير سلسلة من خلال توفير نقطة بداية داخل السلسلة وطول اختياري. إذا لم نوفر طولًا، فستحتوي السلسلة الفرعية على كل شيء من نقطة البداية وحتى آخر حرف.

نقطة البداية والطول يتبعان اسم المتغير، مع وجود علامة النقطتين “:“بينهما. لاحظ أن الأحرف في متغير السلسلة يتم ترقيمها بدءًا من الصفر.

long_string="Frankenstein or the Modern Prometheus"

substring=${long_string:0:12}

echo $substring

echo ${long_string:27}

استخراج سلسلة فرعية من بداية السلسلة


يتيح لك تنويع آخر التخلص من عدد من الأحرف من نهاية السلسلة. فهو يتيح لك فعليًا تحديد نقطة بداية واستخدام رقم سالب كطول. سيحتوي السلسلة الفرعية على الأحرف من نقطة البداية حتى نهاية السلسلة، مطروحًا منها عدد الأحرف التي حددتها في الرقم السالب.

my_string="alphabetical"

echo ${my_string:5:-4}

استخراج سلسلة فرعية من منتصف السلسلة

في جميع الحالات، لا يتم المساس بمتغير السلسلة الأصلي. ولا يتم إزالة السلسلة الفرعية “المستخرجة” فعليًا من محتويات المتغير.

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


إذا كانت السلسلة الخاصة بك محددة بحرف متكرر، فيمكنك استخراج السلاسل الفرعية دون معرفة مكان وجودها في السلسلة، ولا طولها.

للبحث من مقدمة السلسلة، اتبع اسم المتغير بعلامتي النسبة المئوية المزدوجة، %%، الحرف الفاصل، وعلامة النجمة، *الكلمات في هذه السلسلة محددة بمسافات.

long_string="first second third fourth fifth"

echo ${long_string%%' '*}

استخراج سلسلة فرعية من مقدمة السلسلة باستخدام الفاصل

يؤدي هذا إلى إرجاع السلسلة الفرعية الأولى من مقدمة السلسلة التي لا تحتوي على حرف الفاصل. يُطلق على هذا الخيار اسم السلسلة الفرعية القصيرة.


يعيد خيار السلسلة الفرعية الطويلة الجزء الأمامي من السلسلة حتى آخر سلسلة فرعية محددة. بعبارة أخرى، يحذف آخر سلسلة فرعية محددة. من الناحية النحوية، الاختلاف الوحيد هو أنه يستخدم علامة نسبة مئوية واحدة “%“في الأمر.”

long_string="first second third fourth fifth"

echo ${long_string%' '*}

استخراج سلسلة فرعية طويلة من مقدمة السلسلة باستخدام الفاصل

كما تتوقع، يمكنك البحث بنفس الطريقة من نهاية السلسلة. بدلاً من علامة النسبة المئوية، استخدم علامة التجزئة “#“قم بالتوقيع، ثم حرك الفاصل ليأتي بعد علامة النجمة”*“في الأمر.”

long_string="this.long.string.of.words.is.delimited.by.periods"

echo ${long_string##*.}

استخراج سلسلة فرعية من نهاية السلسلة باستخدام الفاصل


هذا هو خيار السلسلة الفرعية القصيرة، فهو يقوم بقص السلسلة الفرعية الأولى التي يجدها من الجزء الخلفي للسلسلة التي لا تحتوي على الفاصل.

long_string="this.long.string.of.words.is.delimited.by.periods"

echo ${long_string#*.}

استخراج سلسلة فرعية طويلة من نهاية السلسلة باستخدام الفاصل

يعيد خيار السلسلة الفرعية الطويلة الجزء الخلفي من السلسلة حتى الفاصل الأول من مقدمة السلسلة. بعبارة أخرى، يحذف السلسلة الفرعية المحددة الأولى.

استبدال السلسلة الفرعية

إن تبديل السلاسل الفرعية بسلاسل فرعية أخرى أمر سهل. التنسيق هو اسم السلسلة، والسلسلة الفرعية التي سيتم استبدالها، والسلسلة الفرعية التي سيتم إدراجها، مفصولة بعلامة “/“الشخصيات.”

string="blue pig giggles"

echo ${string/pig/goat}


استبدال سلسلة فرعية في سلسلة

لتحديد البحث في نهاية السلسلة، قم بوضع علامة النسبة المئوية قبل سلسلة البحث “% ” شخصية.

string="blue pig giggles"

echo ${string/%giggles/chuckles}

استبدال سلسلة فرعية في نهاية السلسلة

لتضييق نطاق البحث إلى بداية السلسلة، قم بوضع علامة التصنيف ” قبل سلسلة البحث “#” شخصية.

string="blue pig giggles"

echo ${string/#blue/yellow}


استبدال سلسلة فرعية في بداية السلسلة

الخيط هو شيء مرن

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

ذات صلة: كل ما تريد معرفته عن العقد على Linux

أضف تعليق