求一个正则表达式,为$$和$$之间的所有_前添加一个\

2015-03-16 15:51:17 +08:00
 discrete

如题,下面是一个latex,为了能在ghost中配合markdown和mathjex使用,需要将_进行转义。

$$ P_t = \frac{Nominal \ GDP}{Real \ GDP}=\frac{$Y_t}{Y_t} $$

替换为:

$$ P\_t = \frac{Nominal \ GDP}{Real \ GDP}=\frac{$Y\_t}{Y\_t} $$

感激不尽。

P.S. 我用Atom进行正则表达式替换。

2760 次点击
所在节点    问与答
11 条回复
walleL
2015-03-16 16:17:04 +08:00
echo '$$ P_t = \frac{Nominal \ GDP}{Real \ GDP}=\frac{$Y_t}{Y_t} $$' | sed -re '/\$\$.+\$\$/{s/_/\\_/g}'

sed 的解法, Atom 没用过
discrete
2015-03-16 16:30:38 +08:00
@walleL 这在Mac下用不了……

``
➜ ~ cat 1 | sed -re '/\$\$.+\$\$/{s/_/\\_/g}'
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
➜ ~ cat 1 | sed '/\$\$.+\$\$/{s/_/\\_/g}'
sed: 1: "/\$\$.+\$\$/{s/_/\\_/g}": bad flag in substitute command: '}'
``
P233
2015-03-16 16:40:31 +08:00
用 vim 吧

:g/^\$\$.*\$\$$/s/_/\\_/g
discrete
2015-03-16 17:19:42 +08:00
@P233 好像有个inline的没适配到

$$ \pi_t \ $

不知为何……
discrete
2015-03-16 17:20:12 +08:00
@P233

抱歉,是

$$ \pi_t \ $$
P233
2015-03-16 17:58:42 +08:00
@discrete 应该可以的,限制了行首和行尾必须是 $$ , 可能行尾有空格。

或者 :g/^\$\$.*\$\$\s*$/s/_/\\_/g 行尾空格也算
discrete
2015-03-18 16:17:20 +08:00
@P233 啊还有一个问题,如果是在$$和$$之间的所有单个存在的$(也就是不会有$$以上)前添加一个\,该怎么改写呢?
P233
2015-03-18 17:45:37 +08:00
vim 的正则预查我搞不定,我应该会替换全部 $ ,然后再把两个的 $$ 换回来

:g/^\$\$.*\$\$\s*$/s/_/\\_/g
P233
2015-03-18 17:47:24 +08:00
还没修改,不小心发出去了

:g/^\$\$.*\$\$\s*$/ 匹配以 $$ 开头和结尾的行,后面跟替换命令,比如 s/\$/\\\$/g
discrete
2015-03-18 19:26:54 +08:00
@P233 我又试了几次,才发现问题所在囧:我的不一定是每行一个这样的式子,而是可能写着写着就$$ \pi_t \ $$这样……如何不匹配行而是仅匹配行内的片段?
P233
2015-03-18 19:49:54 +08:00
抱歉,不了解 latex 以为是整行整行的。可以非贪婪匹配 $$ 与第一个出现的 $$,像这样 :g/\$\$.*?\$\$/ 后面跟着替换命令 s/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/177285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX