Ersetzen einer Textdatei durch einen Verzeichnisnamen mit dem Befehl sed

Ersetzen einer Textdatei durch einen Verzeichnisnamen mit dem Befehl sed

Ich habe die Verzeichnisstruktur wie folgt:

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

Jede TXT-Datei in den Verzeichnissen enthält ein Wort, das ich durch den Verzeichnisnamen ersetzen möchte.

datei.txt:

"name": "Engineering",

Ich möchte das Wort Engineering durch den Verzeichnisnamen ersetzen, z. B. für Ordner1:

"name": "Folder1"

Mein erster Versuch ist wie folgt:

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

Der sed-Befehl scheint jedoch keine Folder*Ordnernummern zu erkennen.

Antwort1

Es ist nicht nötig, cdin das Verzeichnis zu gehen. Sie können die Dateipfade durchlaufen und den Ordnernamen extrahieren:

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

Die Parametererweiterung ${file%%/*}entfernt das längste Suffix /*und belässt den Ordnernamen.

verwandte Informationen