通过终端
问题描述:
从猫结果中替换精确内容到文件中我想动态地更改名称为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
编辑。替换应用于文件的每一行。这还有一个额外的好处,就是对于每一个输入行,您都不需要支付cat
。
请注意,BEGIN
与-p
的行为不同。这在perlmod文档中有大量例子。
Perlish的方式是使用open
,实际上是从文件中读取的,您也必须在BEGIN
块中进行读取。但是对于一个丢弃脚本来说,它并不重要,并且方法更短。
+1
谢谢它作为例外!非常感谢你的宝贵帮助。祝你一切顺利 !! – tphil
'cat'附加换行符。 – simbabque
有没有其他的方法可以做到这一点,而不是猫? – tphil