كيفية استخدام أوامر Linux cat و tac

يعرض الأمران cat و tac محتويات الملفات النصية ، ولكن هناك ما هو أكثر مما تراه العين. تعمق قليلاً وتعلم بعض حيل سطر أوامر Linux المثمرة.

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

أمر القط

القط معتاد على فحص محتويات الملفات النصية، وربط أجزاء من الملفات معًا لتكوين ملف أكبر.

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

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

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

عرض ملف نصي

لجعل cat يسرد محتويات ملف نصي في نافذة طرفية ، استخدم الأمر التالي.

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

cat poem1.txt

تظهر محتويات الملف poem1.txt في نافذة المحطة الطرفية.

هذا فقط نصف القصيدة الشهيرة. أين البقية؟ يوجد ملف آخر هنا يسمى poem2.txt. يمكننا أن نجعل قطة تسرد محتويات ملفات متعددة بأمر واحد. كل ما نحتاج إلى القيام به هو سرد الملفات بالترتيب في سطر الأوامر.

cat poem1.txt poem2.txt

هذا يبدو أفضل. لدينا القصيدة كاملة الآن.

استخدام القط بأقل

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

cat poem1.txt poem2.txt | less

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

  كيف تلعب Age of Empires IV على Linux

ترقيم الأسطر في ملف

يمكن أن يكون لدينا قطة ترقيم الأسطر في الملف كما هو معروض. للقيام بذلك ، نستخدم الخيار -n (رقم).

cat -n poem1.txt

يتم ترقيم الأسطر كما يتم عرضها في نافذة المحطة الطرفية.

لا ترقيم الأسطر الفارغة

تمكنا من ترقيم الأسطر حسب القط ، ولكن يتم حساب الأسطر الفارغة بين الآيات أيضًا. لترقيم سطور النص ولكن لتجاهل الأسطر الفارغة ، استخدم الخيار -b (رقم غير فارغ).

cat -b poem1.txt

يتم الآن ترقيم سطور النص وتخطي أسطر الفراغات.

لا تظهر عدة أسطر فارغة

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

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

cat -s poem1.txt

هذا لا يؤثر على محتويات الملف بأي شكل من الأشكال ؛ إنه يغير الطريقة التي يعرض بها القط الملف.

عرض علامات التبويب

إذا كنت تريد معرفة ما إذا كانت المسافة البيضاء ناتجة عن مسافات أو علامات تبويب ، فيمكنك معرفة ذلك باستخدام الخيار -T (إظهار علامات التبويب).

cat -T poem1.txt

يتم تمثيل علامات التبويب بالأحرف “^ I”.

عرض نهايات السطور

يمكنك التحقق من وجود مسافة بيضاء زائدة باستخدام الخيار -E (عرض النهايات).

cat -E poem1.txt

يتم تمثيل نهايات السطور بالحرف “$”.

ملفات متسلسلة

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

cat poem1.txt poem2.txt > jabberwocky.txt

cat poem1.txt poem2.txt> jabberwocky.txt في نافذة طرفية “العرض =” 646 ″ الارتفاع = “57 ″ عند التحميل =” pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (هذا) ؛ ”  onerror = ”this.onerror = null؛ pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this)؛”> </p>
<p> لنستخدم cat للتحقق من ملفنا الجديد: </ p> </p>
<pre> cat jabberwocky.txt </ pre > <p> <img src =

يحتوي ملفنا الجديد على محتويات الملفين الآخرين.

إلحاق نص بملف موجود

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

إذا كان لدينا أول بيت في ملف ، فيمكننا إضافة هذا إلى أسفل ملف jabberwocky.txt ، وسيكون لدينا القصيدة الكاملة.

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

cat first_verse.txt >> jabberwocky.txt

cat first_verse.txt >> jabberwocky.txt في نافذة طرفية

دعنا نتحقق من محتويات ملف jabberwocky.txt:

 cat jabberwocky.txt < / pre> 

وأخيرًا ، كل أجزاء القصيدة معًا.

إعادة توجيه stdin

يمكنك إعادة توجيه المدخلات من لوحة المفاتيح إلى ملف باستخدام cat. يتم إعادة توجيه كل ما تكتبه إلى الملف حتى تضغط على Ctrl + D. لاحظ أننا نستخدم واحدة> لأننا نريد إنشاء الملف (أو الكتابة فوقه ، إذا كان موجودًا).

cat > my_poem.txt

cat> my_poem.txt في نافذة طرفية

يمكننا البدء في الكتابة بمجرد إصدار الأمر. نضغط على Ctrl + D عندما ننتهي. يمكننا بعد ذلك التحقق من محتويات الملف الجديد باستخدام:

 cat my-poem.txt 

هذا الصوت مثل التوربينات البعيدة ربما يكون لويس كارول يدور في قبره بسرعة عالية.

أمر tac

tac مشابه لـ cat ، لكنه يسرد محتويات الملفات في ترتيب عكسي.

دعنا نرى ذلك:

tac my_poem.txt

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

باستخدام تاك مع stdin

سيؤدي استخدام tac بدون اسم ملف إلى تشغيله على الإدخال من لوحة المفاتيح. سيؤدي الضغط على Ctrl + D إلى إيقاف مرحلة الإدخال ، وسيقوم tac بإدراج كل ما كتبته بترتيب عكسي.

tac

عند الضغط على Ctrl + D ، يتم عكس الإدخال وإدراجه في نافذة المحطة الطرفية.

استخدام tac مع ملفات السجل

بصرف النظر عن حيل الصالون منخفضة الجودة ، هل يمكن لـ tac أن يفعل أي شيء مفيد؟ نعم انها تستطيع. تقوم العديد من ملفات السجل بإلحاق أحدث إدخالاتها في الجزء السفلي من الملف. باستخدام tac (و ، بشكل غير متوقع ، الرأس) يمكننا إدخال الإدخال الأخير في النافذة الطرفية.

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

tac /var/log/syslog | head -1

يقوم head بطباعة أحدث إدخال من ملف سجل النظام ثم يخرج.

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

استخدام tac مع Text Records

آخر خدعة تاك هي الجمال.

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

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

less logfile.dat

كما نرى ، هناك تنسيق مكرر للملف. هناك تسلسلات من ثلاثة أسطر من السداسي عشري القيم. كل مجموعة من ثلاثة أسطر سداسية عشرية لها سطر تسمية يبدأ "= SEQ" ، متبوعًا بتسلسل من الأرقام.

إذا مررنا إلى أسفل الملف ، يمكننا أن نرى أن هناك الكثير من هذه السجلات. الرقم الأخير هو 865.

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

سنلاحظ أن الأسطر الثلاثة الأخيرة في الملف تبدأ بقيم سداسية عشرية 93 و E7 و B8 بهذا الترتيب.

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

tac logfile.dat | less

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

سجلنا سابقًا أن الأسطر الثلاثة الأخيرة في الملف تبدأ بالقيم السداسية العشرية 93 و E7 و B8 بهذا الترتيب. تم عكس ترتيب هذه الخطوط. أيضًا ، أصبحت سطور "= SEQ" الآن أسفل كل مجموعة من ثلاثة أسطر سداسية عشرية.

تاك لانقاذ.

tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | less

دعونا نكسر ذلك.

يقوم الخيار -s (الفاصل) بإعلام tac بما نريد استخدامه كمحدد بين سجلاتنا. يخبر tac بعدم استخدام حرف السطر الجديد المعتاد ، ولكن استخدام الفاصل بدلاً من ذلك.

يقوم الخيار -r (regex) بإخبار tac بمعاملة السلسلة الفاصلة كملف تعبير عادي.

يؤدي الخيار -b (قبل) إلى قيام tac بإدراج الفاصل قبل كل سجل بدلاً من بعده (وهو الموضع المعتاد للفاصل الافتراضي الخاص به ، وهو حرف السطر الجديد).

السلسلة -s (الفاصل) ^ = SEQ. +[0-9]+ * يتم فك شفرة $ على النحو التالي:

يمثل الحرف ^ بداية السطر. ويتبع ذلك = SEQ. +[0-9]+ * $. يوجه هذا tac للبحث عن كل تكرار لـ "= SEQ". في بداية السطر ، متبوعًا بأي تسلسل من الأرقام (يشار إليه بـ [0-9]) ، ويتبعها أي مجموعة أخرى من الأحرف (يشار إليها بعلامة * $).

نحن ننقل كل الكمية إلى أقل ، كالعادة.

يتم تقديم ملفنا الآن بترتيب عكسي مع كل سطر تسمية "= SEQ" مدرج قبل أسطره الثلاثة من البيانات السداسية العشرية. تكون الأسطر الثلاثة للقيم السداسية العشرية بالترتيب الأصلي داخل كل سجل بيانات.

يمكننا التحقق من هذا ببساطة. تطابق القيمة الأولى للخطوط الثلاثة الأولى من السداسي العشري (التي كانت آخر ثلاثة أسطر قبل عكس الملف) القيم التي سجلناها سابقًا: 93 و E7 و B8 ، بهذا الترتيب.

هذه خدعة كبيرة للنافذة الطرفية بخط واحد.

كل شيء له غرض

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

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

أو ، كما تقول فلسفة أخرى ، "لا تحتقر الثعبان لأنه ليس له قرون ، فمن يقول إنه لن يصبح تنينًا؟"