У меня структура каталогов следующая:
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%%/*}
удаляет самый длинный суффикс /*
и оставляет имя папки.