كيفية استخدام الأمر tr في Linux

النقاط الرئيسية

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



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


ما هو الأمر tr؟

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

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

على الرغم من أنه تم اعتماد توزيعتين فقط من Linux حتى الآن كـ بوسيكس متوافقة ومختومة رسميًا باعتبارها مقبولة باعتبارها تنفيذات لنظام التشغيل Unix—أويلر أو إس و إنسبور كيه-يو إكس—لقد حل لينكس محل يونكس بشكل كامل تقريبًا في عالم الأعمال.


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

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

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


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

استبدال الشخصيات

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

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

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


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

نحن نستخدم

echo 

لدفع بعض النص إلى tr .

echo abcdefabc | tr 'c' 'z'

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

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

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

echo abcdefabc | tr 'ac' 'xz'


إزالة حرفين مع tr

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

echo 'call me Ishmael.' | tr 'abcdjklm' '123'

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

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


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

echo 'call me Ishmael.' | tr -t 'abcdjklm' '123'

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

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

يمكن أن تحتوي المجموعة الأولى والمجموعة الثانية على نطاقات من الأحرف. على سبيل المثال، (a-z) يمثل جميع الحروف الصغيرة، و (A-Z) يمثل جميع الأحرف الكبيرة. يمكننا الاستفادة من ذلك لتغيير حالة سلسلة من النصوص.

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

echo "How-To Geek" | tr '(a-z)' '(A-Z)'

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


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

echo "How-To Geek" | tr '(A-Z)' '(a-z)'

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

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

  • (:النوم:):الحروف والأرقام.
  • (:ألفا:):الحروف فقط.
  • (:رقم:):أرقام فقط.
  • (:فارغ:):علامات التبويب والمسافات.
  • (:فضاء:):جميع المسافات البيضاء، بما في ذلك أحرف السطر الجديد.
  • (:الرسم البياني:):جميع الأحرف بما في ذلك الرموز، ولكن ليس المسافات.
  • (:مطبعة:):جميع الأحرف بما في ذلك الرموز، بما في ذلك المسافات.
  • (:نقطة:):جميع علامات الترقيم.
  • (:أدنى:):الأحرف الصغيرة.
  • (:أعلى:):الأحرف الكبيرة.


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

echo "How-To Geek" | tr '(:lower:)' '(:upper:)'

echo "How-To Geek" | tr '(:upper:)' '(:lower:)'

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

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

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

echo abcdefc | tr -c 'c' '-'

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


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

echo abcdefc | tr -c 'ac' '-'

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

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

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

يستخدم هذا الأمر -d (حذف) خيار لإزالة أي ظهور لـ “a”، أو “d”، أو “f” من مجرى الإدخال.

echo abcdefc | tr -d 'adf'

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

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


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

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

echo "a b c de f c" | tr -s '(:blank:)'

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

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

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

echo "a b c de f c" | tr -s '(:space:)'


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

حذف الأحرف

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

echo "a b c de f c" | tr -d '(:blank:)'

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

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

echo "a b c de f c" | tr -d '(:blank:)'


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

هذه المرة لا نبدأ سطرًا جديدًا بعد الإخراج، بل يتم توجيه موجه الأوامر مباشرة إليه. وذلك لأن (:space:) يتضمن أسطرًا جديدة. تتم إزالة أي مسافات وعلامات تبويب وأحرف سطر جديد من مجرى الإدخال.

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

echo "a b c de f c" | tr -d ' '

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

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

echo abcd123efg | tr -d '(:digit:)'


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

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

echo abcd123efg | tr -cd '(:digit:)'

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

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

دمج وتقسيم الخطوط

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

echo 'one two three four' | tr ' ' '\n'


تقسيم سطر من النص إلى كلمة واحدة لكل سطر، مع الترجمة

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

echo 'one two three four' | tr ' ' ':'

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

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

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


echo $PATH

echo $PATH | tr ":" "\n"

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

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

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

cat files.txt

cat lines.txt | tr '\n' ' '

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

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

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


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

  • الأول tr يحذف أي علامات الوصل “-” من المدخلات.
  • الثاني tr يقوم بدمج أي مسافات متكررة في مسافات مفردة.
  • الثالث tr يستبدل المسافات بأحرف السفليّة “_”.
  • الرابع والأخير tr يحول السلسلة إلى أحرف صغيرة.

echo "Mangled FiLE-nAMe.txt" | tr -d '-' | tr -s ' ' | tr ' ' '_' | tr '(:upper:)' '(:lower:)'

خط أنابيب مكون من أربع حالات من النقل

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

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

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

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


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

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

أضف تعليق