البحث عن الجزء الفرعي في PowerShell: دليل سريع

A common scenario in an admin’s world is to figure out a way to find a certain snippet of text inside a string; called the substring. PowerShell makes finding a substring extremely easy.

ذات صلة: تعلم تنسيق السلاسل وتوسيعها

إعلان عن تدريب مباشر مجاني – بدء رحلتك مع PowerShell – قدمها يوهان أرويدمارك. فهم كيف تعزز مهارات PowerShell حياتك المهنية في تكنولوجيا المعلومات، تعلم من أين تبدأ مع PowerShell، قم ببناء نصوصك الأولى، واسأل يوهان مباشرة في بيئة تدريب مباشرة.

PowerShell والسلاسل

في عالم PowerShell ، تتكون السلسلة من مجموعة من الأحرف المحاطة بعلامات اقتباس مفردة أو مزدوجة. السلاسل مثل "foo" و 'bar' شائعة للغاية.

ذات صلة: العودة إلى الأساسيات: سلاسل PowerShell

لنقل أنك قد قمت بتعريف سلسلة في متغير وتحتاج فقط إلى العثور على جزء منها؟ على سبيل المثال، لنقل أن لديك سلسلة بها عنوان مثل 1234 4th St. ترغب في استخراج الرقم وتعرف أن أول أربعة أحرف ستكون دائمًا الرقم الذي تحتاجه. في هذه الحالة، يمكنك استخدام أسلوب substring() في PowerShell.

استخدام أسلوب SubString في PowerShell

للعثور على سلسلة داخل سلسلة باستخدام PowerShell، يمكنك استخدام أسلوب Substring(). يتم العثور على هذا الأسلوب في كل كائن سلسلة في PowerShell.

على سبيل المثال، ربما لديك سلسلة مثل الثعلب البني السريع قفز فوق السياج. تريد أن تجد أول خمسة أحرف. يمكنك القيام بذلك باستخدام الطريقة Substring() على النحو التالي:

$string = 'The quick brown fox jumped over the fence.'
$string.Substring(0,5)

الوسيطة الأولى التي يجب تمريرها إلى الطريقة Substring() هي موضع الحرف الأقصى الأيسر. في هذه الحالة، الحرف الأقصى الأيسر هو T. الوسيطة الثانية هي موضع الحرف الأقصى الأيمن. في هذه الحالة، الحرف هو q.

الطريقة Substring() ترجع جميع الأحرف بينهما.

إليك مثالًا على الواقع:

لنفترض أن لدينا رمز منتج يتبع الصيغة التالية: XXXXVVVV-MM-DD-YYYY. جميع المنتجات لديها هذه الصيغة لا تتحول عنها أبدًا. الآن لنفترض أن برنامج إدارة المخزون الذي أنشأ هذا الرمز لم يتضمن حقلًا لتاريخ الإنشاء في قاعدة البيانات.

ومع ذلك، كان البرنامج يضع هذا التاريخ دائمًا على شكل MM-DD-YYYY في الرمز نفسه لذا يمكننا استنتاج ذلك من رمز المنتج. نحن بحاجة إلى الحصول على هذا التاريخ لمنتجاتنا لإنشاء تقرير رائع للغاية ولكن غير ضروري للإدارة لعرض متى تم إدخال كل منتج في قاعدة البيانات. إليك طريقة جيدة للقيام بذلك.

$product_code = 'ABCD1234-11-12-2013'
$date_created = [DateTime]$product_code.SubString($product_code.Length-10)

في هذا المثال، نستخدم طريقة SubString() في PowerShell لكائن السلسلة الأصلية ونمرر الرقم الخاص بالحرف الأول الذي نريد العثور عليه كمعلمة.

منذ أننا لم نحدد الحرف الذي يُعتبر علامة الوقف، يفترض أننا نريد جميع الأحرف حتى نهاية السلسلة. للعثور على الرقم في المقام الأول، نقوم أولاً بالحصول على طول رمز المنتج بأكمله وببساطة نطرح 10 من ذلك. في هذا المثال، يعني هذا أننا نريد أن نبدأ من الحرف العاشر من اليمين من السلسلة وكل شيء على يمين ذلك.

لا يذهب النوع [DateTime] بالضرورة مع موضوع الاشتقاق الفرعي للمشاركة لكنني اعتقدت أنه سيتناسب بشكل جيد مع المثال المحدد.

بعد أن نحصل على سلسلتنا 11-12-2013، نقوم بتحويلها إلى كائن [DateTime] الذي يقوم بتحويل ما كان في السابق سلسلة بسيطة إلى كائن جميل. من هنا، يمكننا القيام بجميع عمليات الحساب التاريخية الفاخرة التي يرغب الإدارة في القيام بها عليه وإنشاء تقرير الرسم البياني الفاخر!

العثور على اشتقاق فرعي بشكل ديناميكي باستخدام خاصية الطول

في المثال أعلاه، كنت تعرف بشكل ثابت بدء وانتهاء المواقع للأحرف داخل السلسلة. ولكن ماذا لو كنت لا تعرف الموقع الأخير؟

ربما تحتاج إلى العثور على الشريحة الفرعية من الأرقام الأربعة الأخيرة. عليك العثور على مجموعة الأحرف من الموقع الرابع حتى الموقع الأخير على طول النهاية. يمكن أن تكون السلسلة التي تبحث فيها أي طول.

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

$product_code = 'ABCD1234-11-12-2013' باستخدام السلسلة أعلاه، ربما ترغب في البحث عن أربعة أحرف آخرة. بدلاً من القيام بشيء من هذا القبيل:

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString(0,4)
ABCD

يمكنك استبدال 0 بـ $product_code.Length - 4 وعدم استخدام موقف النهاية على الإطلاق، وسيُرجع ذلك آخر أربعة أحرف كما هو موضح أدناه.

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString($product_code.Length-4)
2013

إذا لم تقم بتحديد موقف النهاية، ستقوم طريقة فصل السلسلة في PowerShell دائمًا بافتراض الموقف الأخير.

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

إعلان عن تدريب مباشر مجاني – بداية رحلتك مع PowerShell – قدمها يوهان أرويدمارك. فهم كيف تعزز مهارات PowerShell مسار عملك في تكنولوجيا المعلومات، وتعلم من أين تبدأ مع PowerShell، وقم ببناء نصوصك الأولى، واسأل يوهان أسئلة مباشرة في بيئة تدريب حية.

Source:
https://adamtheautomator.com/powershell-substring/