linux - 通过终端将 cat 结果中的确切内容替换为文件

标签 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", {}))

如何在没有换行符的情况下让它工作?

最佳答案

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

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

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

请注意,BEGIN 的行为与使用 -p 时的正常行为不同。这记录在 perlmod 中靠近大量示例的地方。

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

关于linux - 通过终端将 cat 结果中的确切内容替换为文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201520/

相关文章:

linux - 为什么要为一项任务使用多种类型的 shell?

java - 线程 "main"java.lang.NoClassDefFoundError : MyFile Caused by: java. lang.ClassNotFoundException 中出现异常:

windows - 从命令行对不同长度的十六进制数进行排序?

c - kill函数是同步的吗?

linux - Bash 中的交互式测验(多个问题)

bash - 如何搜索具有特定模式的 3 行组?

Perl:函数参数不足

Perl 模块创建 - 未定义的子例程

Perl:使用 Office 365 发送邮件

bash/sed,以相同的缩进级别替换文件中的行