Markdown 中脚注的正则表达式

Markdown 中脚注的正则表达式

我正在准备一个 Markdown 文档以供打印和 EPUB 文件。我想删除 EPUB 文件的单词定义脚注。

我要删除的脚注的格式[mean-X]可以X是任何字母数字字符集(包括另一个-)。

我试过了:

grep -o "\[\^mean-.*\]"

结果示例:

[^mean-vicissitudes]
[^mean-immortality]
[^mean-ingot]
[^mean-remonstrance]
[^mean-libeller]
[^mean-debauched] and the most amorous[^mean-amorous]
[^mean-turpitude]
[^mean-debauched] drunken, licentious,[^mean-licentious]
[^mean-frivolous]
[^mean-despots]
[^mean-repentance]
[^mean-ignominy]
[^mean-vain]
[^mean-presumptuousness] haughtiness,[^mean-haughtiness]

当两个或多个脚注出现在同一行时,正则表达式会扩展到最后一次出现].

我也尝试过:

  1. grep -o "\[\^mean-.*\][^\[]"其中仍然有一些像原来一样的情况,并在最后一个之后捕获逗号和冒号]

  2. grep -o "\[\{1\}\^mean-.*\]"但这并不能解决问题。我认为它只会捕获 a 的一个实例[

  3. grep -o "\[\^mean-.*\]\{1\}"但它也不能解决问题。我认为它只会捕获 a 的一个实例]

如何使用 grep 捕获脚注并删除它们(不是用空格替换它们,而是消除他们)?

PS 我使用的是 Windows 版 Git Bash,但我认为命令是相同的。

答案1

问题在于.*你的表达方式,即“贪婪”。这使得您的表达式]与该行的其余部分匹配,直到]该行的最后一个。相反,使表达式的这一部分仅匹配您自己所说的可能匹配的内容,即任何字母数字和-。字母数字与 , 匹配[[:alnum:]],并[[:alnum:]-]允许括号内的表达式也匹配破折号:

\[\^mean-[[:alnum:]-]*\]

对您问题中的数据运行此操作:

$ grep -o '\[\^mean-[[:alnum:]-]*\]' file
[^mean-vicissitudes]
[^mean-immortality]
[^mean-ingot]
[^mean-remonstrance]
[^mean-libeller]
[^mean-debauched]
[^mean-amorous]
[^mean-turpitude]
[^mean-debauched]
[^mean-licentious]
[^mean-frivolous]
[^mean-despots]
[^mean-repentance]
[^mean-ignominy]
[^mean-vain]
[^mean-presumptuousness]
[^mean-haughtiness]

你的grep命令显然会提炼匹配,但不会删除它们。为此,请使用sed编辑脚本:

$ sed 's/\[\^mean-[[:alnum:]-]*\]//g' file





 and the most amorous

 drunken, licentious,





 haughtiness,

添加一些空行和初始空白的删除,

$ sed 's/\[\^mean-[[:alnum:]-]*\]//g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//' file
and the most amorous
drunken, licentious,
haughtiness,

或者,仅修改带有 的行[^mean-...]

sed '/\[\^mean-[[:alnum:]-]*\]/{ s///g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//; }' file

相关内容