使用 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%%/*}删除最长的后缀/*并保留文件夹名称。

相关内容