كيف يمكنني إلحاق اسم الملف إلى نهاية كل سطر في هذا الملف؟
سؤال
ولست بحاجة للقيام بما يلي لمئات من الملفات: إلحاق اسم الملف (والتي قد تحتوي على مسافات) إلى نهاية كل سطر في الملف.
ويبدو لي يجب أن يكون هناك طريقة للقيام بذلك:
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