首页 > 解决方案 > sed 替换字符串

问题描述

(declare-const buabor Real)

我想替换为

(declare-fun buabor () Real)

可以用sed完成吗?

我试过了

sed 's/(declare-const\s([a-z])\s(Real))/(declare-fun\s\2\(\)\3/)g'

但无法得到结果任何帮助都会很棒

标签: linuxstringsed

解决方案


这应该这样做(假设使用GNU sed\s是):

sed 's/(declare-const\s\([a-z]*\)/(declare-fun \1()/'
  • 默认情况下,使用 BRE,因此()在搜索部分按字面意思匹配。另请参阅手册中的BRE-vs-ERE部分
  • \(然后\)将成为捕获组
  • [a-z]*将匹配零个或多个小写字母
  • 该行的其余部分不需要匹配并用于替换部分,因为它没有被修改


还有一些观察:

  • (并且)在更换部分并不特别
  • \s在替换部分再次不是特别的,将插入s

推荐阅读