كيفية استخدام Linux tr Command
نشرت: 2023-05-17هل تحتاج إلى طريقة خالية من الرتوش لمعالجة دفق من النص في 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 '
يتم استبدال جميع تكرارات "c" بـ "z" ويتم كتابة السلسلة الجديدة في النافذة الطرفية.
هذه المرة سنبحث عن حرفين ، "أ" و "ج". لاحظ أننا لا نبحث عن "ac." نحن نبحث عن "أ" ، ثم نبحث عن "ج". سنقوم باستبدال أي تكرار لـ "a" بـ "x" وأي تكرار لـ "c" بـ "z".
صدى abcdefabc | tr 'ac' xz '
لكي يعمل هذا ، يجب أن يكون لديك نفس عدد الأحرف في كلتا المجموعتين. إذا لم تفعل ذلك ، فسوف تحصل على سلوك يمكن التنبؤ به ، ولكن على الأرجح غير مرغوب فيه.
صدى "اتصل بي إسماعيل". | tr 'abcdjklm' 123 '
عدد الأحرف في المجموعة الأولى أكثر من عدد الأحرف الموجودة في المجموعة الثانية. لا تحتوي الأحرف "d" إلى "m" على حرف مطابق في المجموعة الثانية. سيستمر استبدالهم ، لكن يتم استبدالهم جميعًا بالحرف الأخير في المجموعة الثانية.
من الممكن أن يكون هذا مفيدًا في بعض الحالات ، ولكن إذا كنت تريد منع ذلك ، فيمكنك استخدام الخيار -t
(اقتطاع). هذا يستبدل فقط تلك الأحرف الموجودة في المجموعة التي لها حرف مطابق في المجموعة الثانية.
صدى "اتصل بي إسماعيل". | tr -t "abcdjklm" 123 "
استخدام النطاقات والرموز
يمكن أن يحتوي تعيين واحد وتعيين اثنين على نطاقات من الأحرف. على سبيل المثال ، يمثل [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"
هذا مثال واحد حيث لدينا مجموعة واحدة فقط من الأحرف في سطر الأوامر ، وليس اثنين.
آخر هو عندما نستخدم الخيار -s
(الضغط على التكرار). يقلل هذا الخيار الأحرف المتكررة إلى حرف واحد.
سيقلل هذا المثال التسلسلات المتكررة لحرف المسافة إلى مسافة واحدة.
صدى "abc de fc" | tr -s '[: blank:]'
من المربك بعض الشيء أن الرمز المميز [:blank:]
يمثل حرف المسافة ، ويمثل الرمز المميز [:space:]
جميع أشكال المسافات البيضاء ، بما في ذلك علامات التبويب وأحرف السطر الجديد.
في هذه الحالة ، يمكننا استبدال [:blank:]
بـ [:space:]
والحصول على نفس النتيجة.
صدى "abc de fc" | tr -s '[: space:]'
حذف الشخصيات
تصبح الفروق بين [:blank:]
و [:space:]
واضحة عندما نحذف الأحرف. للقيام بذلك ، نستخدم الخيار -d
(حذف) ، ونوفر مجموعة من الأحرف التي سيبحث عنها tr
في تدفق الإدخال الخاص به. تتم إزالة أي شيء يجده.
صدى "abc de fc" | tr -d '[: blank:]'
تم حذف المسافات. لاحظ أننا حصلنا على سطر جديد بعد كتابة تدفق الإخراج في نافذة المحطة الطرفية. إذا كررنا هذا الأمر واستخدمنا [:space:]
بدلاً من فارغة ، فسنحصل على نتيجة مختلفة.
صدى "abc de fc" | tr -d '[: blank:]'
هذه المرة لا نبدأ سطرًا جديدًا بعد الإخراج ، يتم توجيه موجه الأوامر ضده. هذا لأن [:space:]
يتضمن أسطرًا جديدة. تتم إزالة أي مسافات وعلامات تبويب وأحرف سطر جديد من تدفق الإدخال.
بالطبع ، يمكنك استخدام حرف مسافة فعلي أيضًا.
صدى "abc de fc" | tr -d "
يمكننا حذف الأرقام بنفس السهولة.
صدى abcd123efg | tr -d "[: digit:]"
من خلال الجمع بين الخيارين -c
(مكمل) و -d
(حذف) يمكننا حذف كل شيء باستثناء الأرقام.
صدى abcd123efg | tr -cd '[: digit:]'
لاحظ أن كل شيء ما عدا الأرقام يعني كل الأحرف وكل المسافات البيضاء ، لذلك مرة أخرى نفقد السطر الجديد النهائي.
ضم وتقسيم الخطوط
إذا استبدلنا المسافات بأحرف سطر جديد ، فيمكننا تقسيم سطر من النص ووضع كل كلمة في السطر الخاص بها.
صدى "واحد اثنان ثلاثة أربعة" | tr '' '\ n'
يمكننا تغيير المحدد الذي يفصل بين الكلمات أيضًا. يستبدل هذا الأمر النقطتين " :
" بالمسافات.
صدى "واحد اثنان ثلاثة أربعة" | tr '': '
يمكننا العثور على أي محدد قيد الاستخدام ، واستبداله بأحرف سطر جديد ، وتقسيم النص الذي يصعب قراءته إلى أسهل لإدارة الإخراج.
متغير بيئة المسار هو سلسلة طويلة من العديد من مسارات الدليل. النقطتان " :
" تفصل بين كل مسار. سنقوم بتغييرها إلى أحرف سطر جديد.
صدى $ PATH
صدى $ PATH | tr ":" "\ n"
هذا أسهل بكثير لتحليل بصريا.
إذا كان لدينا ناتج نريد إعادة تنسيقه إلى سطر واحد ، فيمكننا القيام بذلك أيضًا. يحتوي الملف “lines.txt” على بعض النصوص ، وكلمة واحدة في كل سطر. سنقوم بتغذية ذلك في tr
وتحويله إلى سطر واحد.
cat files.txt
القط line.txt | tr '\ n' '
باستخدام tr مع الأنابيب
يمكننا استخدام الإخراج من tr
كمدخل لبرنامج آخر ، أو حتى لـ tr
نفسه.
يستخدم هذا الأمر tr
أربع مرات.
- أول
tr
يحذف أي واصلات "-" من الإدخال. - تضغط الدالة
tr
الثانية على أي مسافات متكررة في مسافات مفردة. - يستبدل
tr
الثالث المسافات بأحرف تسطير أسفل السطر "_". - يحول
tr
الرابع والأخير السلسلة إلى أحرف صغيرة.
صدى "Mangled FiLE-nAMe.txt" | tr -d '-' | tr -s '| tr '' '_' | tr '[: upper:]' '[: Lower:]'
ذات صلة: كيفية استخدام الأنابيب على نظام Linux
البساطة هي البساطة
الأمر tr
رائع لأنه بسيط. ليس هناك الكثير لنتعلمه ولا نتذكره. لكن بساطته يمكن أن تكون سبب سقوطه أيضًا.
لا تخطئ ، ستجد في كثير من الأحيان أن tr
تتيح لك القيام بما تحتاجه دون الحاجة إلى الوصول إلى أدوات أكثر تعقيدًا مثل sed
.
ومع ذلك ، إذا كنت تكافح من أجل القيام بشيء ما باستخدام tr
، ووجدت نفسك تبني سلاسل طويلة من الأوامر ، فمن المحتمل أن تستخدم sed
.