كسر التلاعب بالسلسلة في باش
عند العمل باستخدام برامج شل النصية، تتمثل المهمة الشائعة في تقسيم سلسلة بناءً على محدد. على سبيل المثال، ضع في اعتبارك سلسلة تحتوي على عناوين بريد إلكتروني مفصولة بفواصل منقوطة. إذا كنت بحاجة إلى معالجة كل بريد إلكتروني على حدة، يصبح فهم كيفية تقسيم هذه السلسلة أمرًا ضروريًا. سترشدك هذه المقالة عبر طرق مختلفة لتحقيق ذلك في Bash.
سنستكشف حلولاً مثل استخدام الأمر `tr` ومعالجة فاصل الحقول الداخلي (IFS). في النهاية، ستتمكن من التعامل مع تقسيم السلسلة بكفاءة وإعادة تعيين IFS إلى قيمته الافتراضية. دعنا نتعمق في مهام البرمجة النصية لـ Bash ونبسطها!
يأمر | وصف |
---|---|
tr | يترجم أو يحذف الأحرف. تُستخدم هنا لاستبدال الفاصلة المنقوطة بحرف السطر الجديد لتقسيم السلسلة. |
IFS | فاصل الحقول الداخلي، يستخدم لتقسيم السلاسل بناءً على محدد محدد في برامج Bash النصية. |
read -r -a | يقرأ سطرًا من الإدخال ويقسمه إلى مصفوفة. يمنع الخيار -r تفسير الخطوط المائلة العكسية على أنها أحرف هروب. |
echo | طباعة النص إلى الإخراج القياسي. يستخدم لعرض عناصر السلسلة المقسمة. |
split | دالة Perl تقوم بتقسيم سلسلة إلى قائمة سلاسل بناءً على محدد محدد. |
foreach | بنية حلقة Perl التي تتكرر عبر قائمة من القيم. |
فهم تقنيات تقسيم سلسلة باش
يوضح البرنامج النصي Bash الأول كيفية تقسيم سلسلة باستخدام ملف tr يأمر. هنا، نحدد سلسلة IN="bla@some.com;john@home.com" والاستخدام echo بالتزامن مع tr لترجمة محدد الفاصلة المنقوطة إلى حرف السطر الجديد. يؤدي هذا إلى تقسيم السلسلة بشكل فعال إلى خطوط فردية. ال for حلقة ثم تتكرر فوق كل سطر، وتطبع العناوين بين قوسين مربعين. هذه الطريقة واضحة ومباشرة وتستفيد من إمكانات معالجة النصوص القوية لأوامر Unix لمعالجة السلاسل.
هناك طريقة أخرى تتضمن ضبط Internal Field Separator (IFS). عن طريق الإعداد مؤقتا IFS إلى فاصلة منقوطة، يمكننا تقسيم السلسلة إلى صفيف. نحن نحفظ الأصل IFS ل OIFS قبل تعديله، لضمان إمكانية استعادته لاحقًا. ال read -r -a يقرأ الأمر سلسلة الإدخال في صفيف يسمى mails2وتقسيمها على أساس المعدل IFS. بعد المعالجة، الأصلي IFS تمت استعادته. يوفر هذا الأسلوب طريقة أكثر برمجة للتعامل مع تقسيم السلسلة في Bash، مما يسمح لنا باستخدام المصفوفات لمزيد من المعالجة.
استخدام Bash لتقسيم السلاسل على محدد
سكريبت باش
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Split string using 'tr' and iterate
mails=$(echo $IN | tr ";" "\n")
for addr in $mails; do
echo "> [$addr]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
تقسيم سلسلة في Bash باستخدام IFS
سكريبت باش
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Save the original IFS
OIFS=$IFS
# Set IFS to semicolon
IFS=';'
# Split string into an array
read -r -a mails2 <<< "$IN"
# Restore the original IFS
IFS=$OIFS
# Iterate over the array
for x in "${mails2[@]}"; do
echo "> [$x]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
استخدام بايثون لتقسيم السلسلة
برنامج بايثون النصي
#!/usr/bin/env python3
# Input string
IN = "bla@some.com;john@home.com"
# Split string by semicolon
mails = IN.split(';')
# Iterate and print each element
for addr in mails:
print(f"> [{addr}]")
# Output:
# > [bla@some.com]
# > [john@home.com]
استخدام بيرل لتقسيم سلسلة
بيرل النصي
#!/usr/bin/env perl
use strict;
use warnings;
# Input string
my $IN = "bla@some.com;john@home.com";
# Split string by semicolon
my @mails = split(';', $IN);
# Iterate and print each element
foreach my $addr (@mails) {
print "> [$addr]\n";
}
# Output:
# > [bla@some.com]
# > [john@home.com]
تقنيات تقسيم السلسلة المتقدمة في Bash
هناك طريقة أخرى قوية لتقسيم السلاسل في Bash تتضمن استخدام awk يأمر. awk هي أداة مساعدة لسطر الأوامر متعددة الاستخدامات مصممة لمسح الأنماط ومعالجتها. يمكن أن يكون مفيدًا بشكل خاص لتقسيم السلاسل لأنه يسمح لنا بتحديد فواصل الحقول المخصصة. على سبيل المثال، يمكننا استخدام awk -F";" '{print $1, $2}' لتقسيم سلسلة بناءً على الفاصلة المنقوطة وطباعة المكونات الفردية. تتميز هذه الطريقة بالمرونة العالية ويمكنها التعامل مع مهام معالجة السلاسل الأكثر تعقيدًا، مما يجعلها أداة قيمة في مجموعة أدوات مبرمجي Bash.
بالإضافة إلى ذلك، cut يمكن استخدام الأمر لتقسيم السلاسل بناءً على المحددات. ال cut يُستخدم الأمر عادةً لاستخراج المقاطع من كل سطر من بيانات الإدخال. من خلال تحديد محدد مع -d الخيار واختيار الحقول مع -f الخيار، يمكننا تقسيم واستخراج أجزاء من السلسلة بكفاءة. على سبيل المثال، باستخدام echo $IN | cut -d';' -f1 سيتم استخراج عنوان البريد الإلكتروني الأول من سلسلة الإدخال. توفر هذه الأساليب المتقدمة المزيد من التحكم والدقة لمهام معالجة السلسلة في Bash.
أسئلة وأجوبة شائعة حول تقسيم السلسلة في Bash
- كيف أقوم بتقسيم سلسلة على محدد في باش؟
- يمكنك استخدام ال IFS متغير أو أوامر مثل tr, awk، و cut لتقسيم السلاسل على محدد.
- ما هو IFS متغير في باش؟
- ال IFS (فاصل الحقول الداخلي) هو متغير خاص يحدد الحرف (الحروف) المستخدم لتقسيم نص الإدخال إلى كلمات أو رموز مميزة.
- كيف يمكنني إعادة تعيين IFS المتغير إلى قيمته الافتراضية؟
- احفظ الأصل IFS القيمة قبل تغييرها واستعادتها بعد المعالجة: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- ماذا يكون ال tr الأمر تفعل في تقسيم السلسلة؟
- ال tr الأمر يترجم أو يحذف الأحرف. يمكنه استبدال المحددات بأسطر جديدة لتقسيم السلسلة: echo $IN | tr ";" "\n".
- هل يمكنني تقسيم سلسلة إلى مصفوفة باستخدام Bash؟
- نعم، عن طريق تغيير IFS متغير واستخدام read -r -a، يمكنك تقسيم السلسلة إلى مصفوفة: read -r -a array <<< "$string".
- ما هو awk الأمر يستخدم ل؟
- awk هي أداة مساعدة لسطر الأوامر لمسح الأنماط ومعالجتها. يمكنه تقسيم السلاسل عن طريق تحديد فواصل الحقول المخصصة.
- كيف يمكن لل cut عمل الأمر؟
- ال cut يقوم الأمر باستخراج الأقسام من كل سطر من الإدخال. يمكنه تقسيم السلاسل عن طريق تحديد محدد واختيار الحقول: echo $string | cut -d';' -f1.
- لماذا يستخدم IFS مفيد في تقسيم السلسلة؟
- استخدام IFS يتيح لك تحديد محددات مخصصة لتقسيم السلاسل، مما يجعلها متعددة الاستخدامات لتنسيقات الإدخال المختلفة.
- هل من الممكن تقسيم سلسلة بمحددات متعددة في Bash؟
- نعم، يمكنك استخدام مزيج من tr و awk للتعامل مع محددات متعددة.
- هل بإمكاني استخدم sed لتقسيم السلسلة في باش؟
- بينما sed هو في المقام الأول محرر دفق، ويمكن دمجه مع أوامر أخرى مثل awk لتقسيم السلاسل بشكل غير مباشر.
الأفكار النهائية حول تقسيم السلسلة في Bash
يمكن أن يؤدي إتقان معالجة السلسلة في Bash إلى تحسين كفاءة البرمجة النصية لديك بشكل كبير. سواء باستخدام IFS للمحددات البسيطة أو الأدوات الأكثر تقدمًا مثل tr و awkهذه التقنيات ضرورية لبرمجة Bash الفعالة. تذكر دائمًا استعادة الأصل IFS لتجنب السلوك غير المتوقع في البرامج النصية الخاصة بك. باستخدام هذه الطرق، يمكنك التعامل مع مجموعة واسعة من مهام معالجة السلسلة في برامج Bash النصية الخاصة بك.