ما هو أمر Linux Shell الذي يُرجع جزءًا من السلسلة؟[ينسخ]

StackOverflow https://stackoverflow.com/questions/219402

  •  03-07-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

أريد العثور على أمر Linux يمكنه إرجاع جزء من السلسلة.في معظم لغات البرمجة، هو substr() وظيفة.هل لدى bash أي أمر يمكن استخدامه لهذا الغرض.أريد أن أكون قادرًا على فعل شيء كهذا..substr "abcdefg" 2 3 - المطبوعات cde.


سؤال مشابه بعد:

هل كانت مفيدة؟

المحلول

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

لأخذ مثالك، حاول:

echo "abcdefg" | cut -c3-5

الذي يحصد

cde

أين -cN-M يخبر أمر القطع بإرجاع الأعمدة N ل M, ، شامل.

نصائح أخرى

من صفحة باش:

${parameter:offset}
${parameter:offset:length}
        Substring  Expansion.   Expands  to  up  to length characters of
        parameter starting at the character  specified  by  offset.
[...]

أو، إذا لم تكن متأكدا من وجود bash, ، فكر في استخدام cut.

في bash "الخالص"، لديك العديد من الأدوات لمعالجة السلسلة (الفرعية)، بشكل أساسي، ولكن ليس حصريًا توسيع المعلمة :

${parameter//substring/replacement}
${parameter##remove_matching_prefix}
${parameter%%remove_matching_suffix}

توسيع السلسلة الفرعية المفهرسة (سلوكيات خاصة ذات إزاحات سلبية، وفي الأطوال السالبة في الأطوال السالبة):

${parameter:offset}
${parameter:offset:length}
${parameter:offset:length}

وبالطبع التوسعات المفيدة جدًا التي تعمل على تحديد ما إذا كانت المعلمة فارغة:

${parameter:+use this if param is NOT null}
${parameter:-use this if param is null}
${parameter:=use this and assign to param if param is null}
${parameter:?show this error if param is null}

لديهم سلوكيات قابلة للتعديل أكثر من تلك المذكورة، وكما قلت، هناك طرق أخرى للتعامل مع السلاسل (الطريقة الشائعة هي $(command substitution) مع sed أو أي مرشح خارجي آخر).ولكن، يمكن العثور عليها بسهولة عن طريق الكتابة man bash أنني لا أشعر أنه من المفيد تمديد هذا المنشور.

في باش يمكنك تجربة هذا:

stringZ=abcABC123ABCabc
#       0123456789.....
#       0-based indexing.

echo ${stringZ:0:2} # prints ab

المزيد من العينات في مشروع توثيق لينكس

expr(1) لديه أمر فرعي substr:

expr substr <string> <start-index> <length>

قد يكون هذا مفيدًا إذا لم يكن لديك bash (ربما Linux مضمن) ولا تريد عملية "الصدى" الإضافية التي تحتاجها لاستخدام القطع (1).

${string:position:length}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top