私のディレクトリ構造は次のとおりです。
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%%/*}
最長のサフィックスを削除し、/*
フォルダ名を保持します。