Substituindo um arquivo de texto por um nome de diretório usando o comando sed

Substituindo um arquivo de texto por um nome de diretório usando o comando sed

Eu tenho a estrutura de diretórios conforme abaixo:

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

Cada arquivo .txt nos diretórios possui uma palavra que desejo substituir pelo nome do diretório.

arquivo.txt:

"name": "Engineering",

Estou procurando substituir a palavra Engenharia pelo nome do diretório, por exemplo, para Pasta1:

"name": "Folder1"

Minha tentativa inicial é a seguinte:

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

No entanto, o comando sed não parece ser visto Folder*como números de pasta.

Responder1

Não há necessidade de cdentrar no diretório. Você pode percorrer os caminhos dos arquivos e extrair o nome da pasta:

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

A expansão do parâmetro ${file%%/*}remove o sufixo mais longo /*e deixa o nome da pasta.

informação relacionada