0

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

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

我在想我必须以某种方式计算'|' 实例以查看是否出现偶数或奇数。

我的工作假设是 | 富 | 酒吧 | 巴兹 | 总是转换为 abs(foo) bar abs(baz) 即没有嵌套。

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

4

1 回答 1

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 )
于 2013-05-24T21:59:39.597 回答