将每个匹配的字符串替换为以模式

时间:2015-09-23 09:13:41

标签: regex sed

上下文

包含需要更新的代码的大型ruby项目。由于匹配结果的数量很重要,我想进行大规模搜索并用正则表达式替换。

问题

鉴于在各种红宝石文件中精心挑选这些可能的字符串:

Resque.enqueue Layers::ReprocessLayers, item.id, true
Resque.enqueue_in 1.days, Backoffice::DeleteS3File, "much-bucket", new_file.key
Resque.enqueue OrderManagement::ReprocessOrder, params[:id]
Resque.enqueue OrderManagement::ReprocessItem, order.id, item.id

对于以.id开头的所有字符串,我想将所有匹配的.id.to_s替换为ResqueResque关键字之前很可能是空格。

1 个答案:

答案 0 :(得分:2)

您可以使用此sed命令:

sed '/^[[:blank:]]*Resque/s/\.id/&.to_s/g' file

模式分手:

/^[[:blank:]]*Resque/  # match lines starting with whitespaces and Resque
s/\.id/&.to_s/g        # replace .id with .id_.to_s