我想动态更改名称为 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
block 。使用 cat
读取变量,然后使用 chomp
ed。替换应用于文件的每一行。这还有一个额外的好处,即您不必为每一行输入都向 cat
支付费用。
请注意,BEGIN
的行为与使用 -p
时的正常行为不同。这记录在 perlmod 中靠近大量示例的地方。
一种更 Perlish 的方法是使用 open
并实际从文件中读取,您也必须在 BEGIN
block 中执行此操作。但对于一次性脚本来说,这并不重要,cat
方式更短。
关于linux - 通过终端将 cat 结果中的确切内容替换为文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201520/