我有一个大型的LaTeX文档,我正在寻找改变我使用绝对值表示法的地方的格式。理想情况下我会自动执行此操作,但我不确定如何构建正则表达式。
我看过这个网站上的其他问题,很多人都在讨论如何用abs(foo)替换(foo),但问题是'('和')'是不同的字符,而开头和结束绝对值括号是相同的。
我在想我不得不数'...'查看是否出现偶数或奇数的实例。
我正在假设| foo |吧|巴兹|总是转换为abs(foo)bar abs(baz),即没有嵌套。
有办法做到这一点吗?我已经使用了一些grep,但没有多少sed或perl,所以我不清楚如何进行搜索和替换。
答案 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 )