通过终端将确切的内容从 cat 结果替换到文件中



我想动态更改文件名为 waf.py 的文件上的一些值。

台词是这样的

pp.pprint(api.post("/sites/<SITEID>/waf", {}))

我已将价值存储到另一个名为 .adnid 的文件

我正在使用命令处理

perl -pe 's/<SITEID>/`cat .adnid`/ge' -i waf.py

它替换内容,但它在其上添加n(输入(,其余内容转到新行,例如

pp.pprint(api.post("/sites/626041
/waf", {}))

而不是例外(1 行(

pp.pprint(api.post("/sites/626041/waf", {}))

如何在没有换行符的情况下使其工作?

您可以使用

cat,但您需要chomp它附加的换行符。

perl -pe 'BEGIN { $id=`cat .adnid`; chomp $id } s/<SITEID>/$id/ge' -i waf.py

这将添加一个只会执行一次的BEGIN块。变量使用 cat 读取,然后chomp ed。替换将应用于文件的每一行。这还有一个额外的好处,即您不会为每一行输入支付cat

请注意,BEGIN的行为与正常情况下不同 -p .这记录在 perlmod 中靠近大量示例的某个地方。

一种更Perlish的方法是使用open并从文件中实际读取,您还必须在BEGIN块中执行此操作。但是对于一次性脚本来说,这并不重要,cat方式更短。

最新更新