【发布时间】:2021-12-25 00:07:03
【问题描述】:
我有一个父目录,其中包含一系列子目录,名为:
1
2
3
4 # <-- This one is used in an example below.
...
每个子目录都包含一个名为input 的文件和一个名为data 的孙子目录。在“data”中是一个通过将子目录名称乘以 1000 命名的文件。例如:
Parent directory / daughter directory #4 / input
Parent directory / daughter directory #4 / data / 4000.dat
这是我需要做的事情:
在每个input 文件中,将术语“old_file_name”替换为相应data 目录中的文件名。所以在上面的例子中,我需要找到术语“old_file_name”并将其替换为“4000.dat”。
这是我尝试过的,并附有我想要对每个 input 文件执行的操作的注释:
find_replace_old_file_name="old_file_name"
i=$((daughter)); # This is the directories called "1," "2," "3," etc.
daughter2=$((1000*daughter)) # Multiply by 1000 to get correct filename in /data.
l=$(sed "${i}q;d" parent/$daughter/data/$daughter2.dat) # Get filename of file in /data.
echo ${l%}
find parent/${i} -type f -exec sed -i -e "s/${find_replace_old_file_name}/${l}/g" {} +
我在“l=”步骤做错了,因为在每个input 文件中,术语old_file_name 被替换为.dat 文件的内容,而不是它们的名称。所以在上面的例子中,我希望4000.dat 替换相应的input 文件中的old_file_name,但我得到的是4000.dat. 的内容有谁知道我做错了什么?
【问题讨论】:
标签: file sed replace file-io find