使用 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%%/*}刪除最長的後綴/*並保留資料夾名稱。

相關內容