كيف يمكنني إلحاق اسم الملف إلى نهاية كل سطر في هذا الملف؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

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

ويبدو لي يجب أن يكون هناك طريقة للقيام بذلك:

sed -e 's/$/FILENAME/' *

وحيث يمثل FILENAME اسم الملف الحالي. هناك متغير الحوار الاقتصادي الاستراتيجي يمثل اسم الملف الحالي؟ أو هل لديها حل آخر باستخدام باش، AWK، الخ.؟

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

المحلول

وأنا متأكد من أن هناك طرق أخرى للقيام بذلك، فما استقاموا لكم فاستقيموا استخدام بيرل:

perl -p -i -e 's/$/$ARGV/;' *

نصائح أخرى

وبعض إصدارات دعم الحوار الاقتصادي الاستراتيجي في "_ في مكان" حجة حتى تتمكن من تكثيف حل تايلر إلى

for i in * ; do 
  sed -e "s/\$/$i/" --in-place "$i" 
done

ويمكنك أن تفعل ذلك مع نصي باش

for i in * 
do
  sed -e "s/\$/$i/" "$i" 
done

ونسخة بطانة الأول:

for i in * ; do sed -e "s/\$/$i/" "$i" ; done

تعديل: إذا كنت تريد استبدال محتويات الملف مع خطوط جديدة، إلحاق الاسم، والقيام بذلك:

TFILE=`mktemp`
for i in * 
do
  sed -e "s/\$/$i/" "$i" > $TFILE
  cp -f $TFILE "$i"
done
rm -f $TFILE
awk '{print $0,FILENAME}' > tmpfile

في BASH، كنت تفعل شيئا للتأثير:

for f in *; do echo $f >> $f; done

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

(
  OLDIFS=$IFS
  IFS=$'\n'
  for f in *
  do
    IFS=OLDIFS
    sed -e "s/\$/$f/" $f > tmpfile
    mv tmpfile $f
    IFS=$'\n'
  done
)

وهذا قد عمل لك:

printf "%s\n" * | sed 's/.*/sed -i "s|$| &|" &/' | bash
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top