كيفية استخدام Linux tr Command

نشرت: 2023-05-17
شاشة بدء تشغيل Ubuntu Linux على جهاز كمبيوتر محمول
جوردان جلور / كيف تو جيك
ينفذ الأمر tr عمليات تحويل على دفق من النص ، وينتج دفقًا جديدًا كإخراج له. يمكنك استبدال الأحرف أو حذفها أو تحويلها وفقًا للقواعد التي تحددها في سطر الأوامر.

هل تحتاج إلى طريقة خالية من الرتوش لمعالجة دفق من النص في Linux؟ لا تنظر أبعد من الأمر tr ، والذي يمكن أن يوفر لك الوقت في استبدال نص الإدخال وإزالته وضمه وضغطه. هذا هو كيفية القيام به.

جدول المحتويات

ما هو أمر tr؟
استبدال الأحرف
استخدام النطاقات والرموز
قلب المباريات
حذف وضغط الأحرف
حذف الشخصيات
ضم وتقسيم الخطوط
باستخدام tr مع الأنابيب
البساطة هي البساطة

ما هو أمر tr؟

يعد أمر Linux tr أداة مساعدة سريعة وبسيطة لتجريد الأحرف غير المرغوب فيها من تدفقات النص ولحيل معالجة أخرى أنيقة. وقد اشتق اسمه من كلمة "ترجم" ، وجذور tr عميقة في تقليد Unix.

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

على الرغم من أن توزيعين فقط من Linux تم اعتمادهما حتى الآن على أنهما متوافقان مع POSIX وختمهما بالمطاط على أنهما مقبولان رسميًا كتطبيقات لـ Unix - EulerOS و Inspur K-UX - فقد حل Linux محل Unix بالكامل تقريبًا في عالم الأعمال.

تلتزم جميع توزيعات Linux ، على الأقل في أدواتها الأساسية ، بفلسفة Unix. تلخص فلسفة Unix الرؤية التي كان لدى رواد Unix لنظام التشغيل الجديد الخاص بهم. غالبًا ما تتم صياغته شبه معدلة على أنها "اكتب البرامج التي تؤدي شيئًا واحدًا جيدًا". ولكن هناك ما هو أكثر من ذلك.

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

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

هذا هو المكان الذي يأتي فيه tr إلى حد ذاته. يسمح لك بإجراء مجموعة من التحويلات البسيطة على دفق الإدخال الخاص به ، لإنتاج تدفق الإخراج الخاص به. يمكن إعادة توجيه دفق الإخراج هذا إلى ملف ، أو إدخاله في برنامج Linux آخر ، أو حتى في مثيل آخر من tr لتطبيق تحويلات متعددة على الدفق.

استبدال الأحرف

يعمل الأمر tr على تدفق الإدخال وفقًا للقواعد. عند استخدامه بدون أي خيارات سطر أوامر ، يكون الإجراء الافتراضي لـ tr هو استبدال الأحرف في دفق الإدخال بأحرف أخرى.

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

الطريقة التي يعمل بها هذا هي تكرارات الحرف الأول في المجموعة الأولى سيتم استبداله بالحرف الأول في المجموعة الثانية. سيتم استبدال تكرارات الحرف الثاني في المجموعة الأولى بالحرف الثاني في المجموعة الثانية ، وهكذا.

سيبحث هذا المثال عن الحرف "c" في تدفق الإدخال إلى tr ، ويستبدل كل تكرار بالحرف "z". لاحظ أن tr حساس لحالة الأحرف.

نحن نستخدم echo لدفع بعض النصوص إلى tr .

 صدى abcdefabc | tr 'c' z ' 

استبدال حرف واحد بـ tr

يتم استبدال جميع تكرارات "c" بـ "z" ويتم كتابة السلسلة الجديدة في النافذة الطرفية.

هذه المرة سنبحث عن حرفين ، "أ" و "ج". لاحظ أننا لا نبحث عن "ac." نحن نبحث عن "أ" ، ثم نبحث عن "ج". سنقوم باستبدال أي تكرار لـ "a" بـ "x" وأي تكرار لـ "c" بـ "z".

 صدى abcdefabc | tr 'ac' xz ' 

حذف حرفين بواسطة tr

لكي يعمل هذا ، يجب أن يكون لديك نفس عدد الأحرف في كلتا المجموعتين. إذا لم تفعل ذلك ، فسوف تحصل على سلوك يمكن التنبؤ به ، ولكن على الأرجح غير مرغوب فيه.

 صدى "اتصل بي إسماعيل". | tr 'abcdjklm' 123 ' 

استخدام مجموعات غير متوازنة من الأحرف مع tr

عدد الأحرف في المجموعة الأولى أكثر من عدد الأحرف الموجودة في المجموعة الثانية. لا تحتوي الأحرف "d" إلى "m" على حرف مطابق في المجموعة الثانية. سيستمر استبدالهم ، لكن يتم استبدالهم جميعًا بالحرف الأخير في المجموعة الثانية.

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

 صدى "اتصل بي إسماعيل". | tr -t "abcdjklm" 123 " 

استخدام مجموعات غير متوازنة من الأحرف مع tr مع خيار truncate

استخدام النطاقات والرموز

يمكن أن يحتوي تعيين واحد وتعيين اثنين على نطاقات من الأحرف. على سبيل المثال ، يمثل [az] جميع الأحرف الصغيرة ، ويمثل [AZ] جميع الأحرف الكبيرة. يمكننا الاستفادة من هذا لتغيير حالة تدفق النص.

سيؤدي هذا إلى تحويل دفق الإدخال إلى أحرف كبيرة.

 صدى "How-To Geek" | tr '[az]' [من الألف إلى الياء] ' 

استخدام نطاقات الأحرف لتحويل سلسلة إلى أحرف كبيرة

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

 صدى "How-To Geek" | tr '[AZ]' [az] ' 

استخدام نطاقات الأحرف لتحويل سلسلة إلى أحرف صغيرة

هناك رموز يمكننا استخدامها لبعض الحالات الشائعة التي قد نرغب في المطابقة معها.

  • [: alnum:] : أحرف وأرقام.
  • [: alpha:] : أحرف فقط.
  • [: digit:] : أرقام فقط.
  • [: blank:] : علامات التبويب والمسافات.
  • [: space:] : كل المسافات البيضاء ، بما في ذلك أحرف السطر الجديد.
  • [: الرسم البياني:] : جميع الأحرف بما في ذلك الرموز ، ولكن ليس المسافات.
  • [: print:] : جميع الأحرف بما في ذلك الرموز ، بما في ذلك المسافات.
  • [: علامة:] : جميع علامات الترقيم.
  • [: Lower:] : أحرف صغيرة.
  • [: العلوي:] : أحرف كبيرة.

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

 صدى "How-To Geek" | tr '[: Lower:]' '[: upper:]'
 صدى "How-To Geek" | tr '[: upper:]' '[: Lower:]' 

استخدام الرموز لتغيير حالة سلاسل النص

قلب المباريات

يتطابق الخيار -c (مكمل) مع جميع الأحرف باستثناء تلك الموجودة في المجموعة الأولى. يحول هذا الأمر كل شيء ما عدا الحرف "c" إلى واصلة " - ".

 صدى abcdefc | tr -c "ج" - " 

استبدال جميع الأحرف باستثناء المحددة بأحرف أخرى

يضيف هذا الأمر الحرف "a" إلى المجموعة الأولى. يتم تحويل أي شيء بخلاف "أ" أو "ج" إلى حرف " - " واصلة.

 صدى abcdefc | tr -c "ac" - " 

استبدال جميع الأحرف باستثناء الأحرف المتعددة المحددة بأحرف أخرى

حذف وضغط الأحرف

يمكننا استخدام tr لإزالة الأحرف تمامًا ، دون أي استبدال.

يستخدم هذا الأمر الخيار -d (حذف) لإزالة أي تكرارات لـ "a" أو "d" أو "f" من تدفق الإدخال.

 صدى abcdefc | tr -d "adf" 

حذف عدة أحرف من سلسلة نصية باستخدام tr

هذا مثال واحد حيث لدينا مجموعة واحدة فقط من الأحرف في سطر الأوامر ، وليس اثنين.

آخر هو عندما نستخدم الخيار -s (الضغط على التكرار). يقلل هذا الخيار الأحرف المتكررة إلى حرف واحد.

سيقلل هذا المثال التسلسلات المتكررة لحرف المسافة إلى مسافة واحدة.

 صدى "abc de fc" | tr -s '[: blank:]' 

تغيير التسلسلات المتكررة للأحرف إلى تكرار واحد للحرف ، باستخدام tr

من المربك بعض الشيء أن الرمز المميز [:blank:] يمثل حرف المسافة ، ويمثل الرمز المميز [:space:] جميع أشكال المسافات البيضاء ، بما في ذلك علامات التبويب وأحرف السطر الجديد.

في هذه الحالة ، يمكننا استبدال [:blank:] بـ [:space:] والحصول على نفس النتيجة.

 صدى "abc de fc" | tr -s '[: space:]' 

تغيير التسلسلات المتكررة للأحرف إلى تكرار واحد للحرف ، باستخدام tr

حذف الشخصيات

تصبح الفروق بين [:blank:] و [:space:] واضحة عندما نحذف الأحرف. للقيام بذلك ، نستخدم الخيار -d (حذف) ، ونوفر مجموعة من الأحرف التي سيبحث عنها tr في تدفق الإدخال الخاص به. تتم إزالة أي شيء يجده.

 صدى "abc de fc" | tr -d '[: blank:]' 

حذف الفراغات (المسافات) من سلسلة نصية باستخدام tr

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

 صدى "abc de fc" | tr -d '[: blank:]' 

حذف المسافة البيضاء من سلسلة نصية باستخدام tr

هذه المرة لا نبدأ سطرًا جديدًا بعد الإخراج ، يتم توجيه موجه الأوامر ضده. هذا لأن [:space:] يتضمن أسطرًا جديدة. تتم إزالة أي مسافات وعلامات تبويب وأحرف سطر جديد من تدفق الإدخال.

بالطبع ، يمكنك استخدام حرف مسافة فعلي أيضًا.

 صدى "abc de fc" | tr -d " 

حذف مسافات من سلسلة نصية ، بتحديد حرف مسافة باستخدام tr

يمكننا حذف الأرقام بنفس السهولة.

 صدى abcd123efg | tr -d "[: digit:]" 

حذف الأرقام من سلسلة نصية باستخدام tr

من خلال الجمع بين الخيارين -c (مكمل) و -d (حذف) يمكننا حذف كل شيء باستثناء الأرقام.

 صدى abcd123efg | tr -cd '[: digit:]' 

حذف كل شيء باستثناء الأرقام من سلسلة نصية باستخدام tr

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

ضم وتقسيم الخطوط

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

 صدى "واحد اثنان ثلاثة أربعة" | tr '' '\ n' 

تقسيم سطر من النص إلى كلمة واحدة في كل سطر ، باستخدام tr

يمكننا تغيير المحدد الذي يفصل بين الكلمات أيضًا. يستبدل هذا الأمر النقطتين " : " بالمسافات.

 صدى "واحد اثنان ثلاثة أربعة" | tr '': ' 

تغيير محدد الكلمة من الفراغات إلى النقطتين باستخدام tr

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

متغير بيئة المسار هو سلسلة طويلة من العديد من مسارات الدليل. النقطتان " : " تفصل بين كل مسار. سنقوم بتغييرها إلى أحرف سطر جديد.

 صدى $ PATH
 صدى $ PATH | tr ":" "\ n" 

تقسيم متغير البيئة $ PATH إلى مسارات دليل منفصلة ، واحد لكل سطر ، باستخدام tr

هذا أسهل بكثير لتحليل بصريا.

إذا كان لدينا ناتج نريد إعادة تنسيقه إلى سطر واحد ، فيمكننا القيام بذلك أيضًا. يحتوي الملف “lines.txt” على بعض النصوص ، وكلمة واحدة في كل سطر. سنقوم بتغذية ذلك في tr وتحويله إلى سطر واحد.

 cat files.txt
 القط line.txt | tr '\ n' ' 

دمج الإدخال متعدد الأسطر في سطر واحد من النص باستخدام tr

باستخدام tr مع الأنابيب

يمكننا استخدام الإخراج من tr كمدخل لبرنامج آخر ، أو حتى لـ tr نفسه.

يستخدم هذا الأمر tr أربع مرات.

  • أول tr يحذف أي واصلات "-" من الإدخال.
  • تضغط الدالة tr الثانية على أي مسافات متكررة في مسافات مفردة.
  • يستبدل tr الثالث المسافات بأحرف تسطير أسفل السطر "_".
  • يحول tr الرابع والأخير السلسلة إلى أحرف صغيرة.
 صدى "Mangled FiLE-nAMe.txt" | tr -d '-' | tr -s '| tr '' '_' | tr '[: upper:]' '[: Lower:]' 

خط أنابيب من أربع مثيلات من tr

ذات صلة: كيفية استخدام الأنابيب على نظام Linux

البساطة هي البساطة

الأمر tr رائع لأنه بسيط. ليس هناك الكثير لنتعلمه ولا نتذكره. لكن بساطته يمكن أن تكون سبب سقوطه أيضًا.

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

كيفية استخدام الأمر sed على لينكس
ذات صلة كيفية استخدام الأمر sed على لينكس

ومع ذلك ، إذا كنت تكافح من أجل القيام بشيء ما باستخدام tr ، ووجدت نفسك تبني سلاسل طويلة من الأوامر ، فمن المحتمل أن تستخدم sed .