Замена текстового файла именем каталога с помощью команды sed

Замена текстового файла именем каталога с помощью команды sed

У меня структура каталогов следующая:

Folder1/
  |____file.txt
Folder2/
  |____file.txt 
Folder3/
  |____file.txt
  :
Foldern/
  |____file.txt   

В каждом файле .txt в каталогах есть слово, которое я хочу заменить на имя каталога.

файл.txt:

"name": "Engineering",

Я хочу заменить слово Engineering на имя каталога, например, для Folder1:

"name": "Folder1"

Моя первая попытка выглядит следующим образом:

for f in Folder*; do (cd $f; echo $f; sed -i -e "s/Engineering/Folder*/" file.txt); done

Однако команда sed, похоже, не видит Folder*номера папок.

решение1

Нет необходимости заходить cdв каталог. Вы можете перебрать пути к файлам и извлечь имя папки:

for file in Folder*/file.txt; do
  sed -i -e "s/Engineering/${file%%/*}/" "$file"
done

Расширение параметра ${file%%/*}удаляет самый длинный суффикс /*и оставляет имя папки.

Связанный контент