我有一个场景,我需要在一个目录中的多个文件中用这个文件名替换一个变量(相同的变量)。
例如,我有一份内容相同的文件列表;
file1的 文件2 文件3 file4将
每个文件的内容是;
Some Text
Another line of text
I need to replace this $variable
我想要做的是将模式$ variable的所有实例替换为所述文件的名称。
即。 file1的内容将变为
Some Text
Another line of text
I need to replace this file1
并且file2的内容将变为
Some Text
Another line of text
I need to replace this file2
我一直在研究sed并认为它可能是要走的路,但我在编写脚本方面经常出错,这当然不是一个强点。
答案 0 :(得分:1)
您可以将此用于循环:
while read -r f; do
sed -i.bak "s~\$variable~$f~" "$f"
done < <(grep -l '\$variable' file*)
如果要对目录中的每个文件执行此操作,请将glob模式file*
更改为*
。
答案 1 :(得分:0)
使用GNU awk进行就地编辑和字锚:
awk -i inplace '{gsub(/\<\$variable\>/,FILENAME); print}' file*
对于包含&
或\\<number>
的文件名,上述操作将失败。如果这是一个问题,解决方案是使用match()或index()与substr()而不是gsub()。