ما الأمر يونكس يمكن أن نستخدمها لإلحاق بعض النص إلى خط معين في الملف؟
سؤال
لا أحد يعرف سلسلة من الأوامر يونكس الذي يسمح شخص لإلحاق بعض النص إلى نهاية سطر معين في الملف؟
وعلى سبيل المثال
خط 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