sed:如何用文件名替换文件中的标识符/关键字?
Posted
技术标签:
【中文标题】sed:如何用文件名替换文件中的标识符/关键字?【英文标题】:sed: how can I replace an identifier/key word in a file with a file name? 【发布时间】: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 "$iq;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.
的内容有谁知道我做错了什么?
【问题讨论】:
【参考方案1】:我不确定回答自己问题的礼仪,但我想我会发布一个解决方案,以防它对其他人有用。
我遇到了这个问题 (Getting "Permission denied" on dirname and basename) 并修改了答案以替换我的“l=”行:
l=$(basename parent/$daughter/data/*.dat)
它解决了我的问题。我得到了文件的名称,现在可以将其放入input
文件中。
【讨论】:
以上是关于sed:如何用文件名替换文件中的标识符/关键字?的主要内容,如果未能解决你的问题,请参考以下文章