正则表达式替换| foo |与abs(foo)

时间:2013-05-24 21:53:05

标签: regex replace sed grep full-text-search

我有一个大型的LaTeX文档,我正在寻找改变我使用绝对值表示法的地方的格式。理想情况下我会自动执行此操作,但我不确定如何构建正则表达式。

我看过这个网站上的其他问题,很多人都在讨论如何用abs(foo)替换(foo),但问题是'('和')'是不同的字符,而开头和结束绝对值括号是相同的。

我在想我不得不数'...'查看是否出现偶数或奇数的实例。

我正在假设| foo |吧|巴兹|总是转换为abs(foo)bar abs(baz),即没有嵌套。

有办法做到这一点吗?我已经使用了一些grep,但没有多少sed或perl,所以我不清楚如何进行搜索和替换。

1 个答案:

答案 0 :(得分:4)

尝试这个sed行:

sed -r 's/([^|]*)\|([^|]+)\|/\1abs(\2)/g' file.tex

注意

  • 我使用-r来保存一些转义。

  • 这种替代是有风险的,你必须进行测试。因为sed在你的文本中不知道,哪种情况是绝对值表示法,哪种情况是逻辑或表示法,或按位“或”操作。如果你的文字有那些。

以你的例子:

kent$  echo " | foo | bar | baz |"|sed -r 's/([^|]*)\|([^|]+)\|/\1abs(\2)/g'                                                                                                
 abs( foo ) bar abs( baz )