ما الأمر يونكس يمكن أن نستخدمها لإلحاق بعض النص إلى خط معين في الملف؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

وعلى سبيل المثال

خط 1

والخط 2

والخط 3

والخط 4

وأود أن إلحاق النص "، معلومات إضافية" لخط 3 بحيث ملف والآن تبدو هذه:

خط 1

والخط 2

والسطر 3، معلومات إضافية

والخط 4

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

المحلول

وبيرل:

perl -p -e's{\n}{, extra information\n} if $. ==3' myfile

و$. هو رقم السطر

نصائح أخرى

وفي AWK انها:

awk '{s=$0; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile

ونسخة سد الصحيح:

sed -e '3s/$/, Extra Information/' -i myfile

وهنا هو نسخة مع sed المحمولة (بدون الخيار -i):

sed '3s/$/Hello World/' myfile

ملاحظة لا يتم تعديل هذا myfile، حتى تتمكن من التعافي من الأخطاء المحتملة.

awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile

والجزء قبل الأقواس هو حالة : إذا كنا في خط 3، ونحن إلحاق بعض النص. إذا تم حذف الأقواس، الإجراء الافتراضي هو طباعة للتو $0. إعادة توجيه إلى ملف جديد أو الأنابيب إلى برنامج آخر حسب الاقتضاء. لا يمكن إعادة توجيه إلى نفس الملف الذي يتم قراءة فقط. والحل المشترك هو إعادة توجيه إلى ملف جديد، ومن ثم نقل أكثر إذا كان الأمر ناجحا:

somecommand > oldfile.tmp && mv oldfile.tmp oldfile
sed -e "s/^Line 3/\0, extra info/" -i text.txt

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

إذا كنت تريد إلحاق شيء (تقريبا) كل سطر في الملف، يجب إنشاء الملف الثاني مع معلومات اضافية لكل خط واستخدام paste:

$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra 
something

something else
$ paste myfile extra
line 1  something
line 2
line 3  something else
line 4
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top