.conf
除了具有不同的文件名之外,我在同一目录中有许多文件相同。在每个唯一命名的.conf
文件中,我想用文件名替换文件中的一组字符。例如:
当前在所有文件中:
datafname = example.nex
ofprefix = best.example
理想输出:
文档名称: 25.conf
datafname = 25.nex
ofprefix = best.25
文档名称: 26.conf
datafname = 26.nex
ofprefix = best.26
我以为我可以sed
遍历所有这些文件来查找文本字符串,并将其替换为文件名,例如:
sed -i conf 's/example/echo $f/g' *
但这不能正常工作。有人会建议如何做吗?
你可以做:
for f in *.conf; do
base=$(basename "$f" '.conf') # gives '25' from '25.conf'
sed -i.before "s/example/$base/g" "$f"
done
使用-i
切换到时sed
,必须绝对确保sed
命令可以正常运行,因为-i
会在适当位置更改文件。这意味着生成的输出将覆盖输入文件。如果替换命令(s/…/…/
)错误,则最终可能会得到空文件且没有备份。因此,我使用-i.before
它将保留*.before
原始内容的文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句