通过终端

问题描述:

从猫结果中替换精确内容到文件中我想动态地更改名称为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", {})) 

我怎样才能使它不换行工作?

+0

'cat'附加换行符。 – simbabque

+0

有没有其他的方法可以做到这一点,而不是猫? – tphil

您可以使用cat,但您需要chomp关闭它附加的换行符。

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

这增加了一个只会执行一次的BEGIN块。变量被读取使用cat然后chomp编辑。替换应用于文件的每一行。这还有一个额外的好处,就是对于每一个输入行,您都不需要支付cat

请注意,BEGIN-p的行为不同。这在perlmod文档中有大量例子。

Perlish的方式是使用open,实际上是从文件中读取的,您也必须在BEGIN块中进行读取。但是对于一个丢弃脚本来说,它并不重要,并且方法更短。

+1

谢谢它作为例外!非常感谢你的宝贵帮助。祝你一切顺利 !! – tphil