【发布时间】:2015-02-03 05:22:48
【问题描述】:
只是没有足够的 sed 用户能够弄清楚这一点。我正在尝试将下划线转换为 lodash,这需要将许多调用从 _(obj).method() 更改为 _.method(obj)。我一直在尝试使用 sed 来做到这一点:
sed "s/_(\(.*\)).\(.*\)(/_.\2(\1, /"
这种模式实际上适用于一行中的单个实例。例如
echo "_(foo).bar('blah')" | sed "s/_(\(.*\)).\(.*\)(/_.\2(\1, /"
实际上输出了预期的结果:_.bar(foo, 'blah')。问题是当一行出现多次时。例如
echo "_(foo).bar('baz') yep _(baz).quux('blah')" | sed "s/_(\(.*\)).\(.*\)(/_.\2(\1, /"
输出_.quux(foo).bar('baz') yep _(baz, 'blah') 和
echo "_(foo).bar('baz') yep _(baz).quux('blah')" | sed "s/_(\([^(]*\)).\(.*\)(/_.\2(\1, /"
输出_.bar('baz') yep _(baz).quux(foo, 'blah')。
所以,我显然只是不明白如何在我的替换文本中使用捕获组。顺便说一句,在末尾添加 /g 并不能解决此问题。
【问题讨论】:
标签: sed