Как я могу добавить имя файла в конец каждой строки в этом файле?

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

  •  08-07-2019
  •  | 
  •  

Вопрос

Мне нужно сделать следующее для сотен файлов: Добавьте имя файла (которое может содержать пробелы) в конец каждой строки в файле.

Мне кажется, должен быть какой-то способ сделать это:

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

где FILENAME представляет имя текущего файла. Существует ли переменная sed, представляющая текущее имя файла? Или у кого-нибудь есть другое решение, использующее bash, awk и т. Д.?

Это было полезно?

Решение

Я уверен, что есть другие способы сделать это, я бы использовал perl:

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

Другие советы

Некоторые версии sed поддерживают " - на месте " аргумент, так что вы можете сжать решение Тайлера в

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

Вы можете сделать это с помощью bash-скрипта

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 <*>,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