通过终端

时间:2017-05-26 12:22:55

标签: linux perl sed terminal

我想动态地更改文件上的某些值,名称为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", {}))

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

1 个答案:

答案 0 :(得分:2)

您可以使用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块中执行此操作。但对于丢失的脚本而言,它并不重要,cat方式更短。