我正在准备一份降价文档以供打印和作为 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]
当两个或多个脚注出现在同一行时,就会出现问题,正则表达式会延伸到最后一次出现的 a ]
。
我也试过:
grep -o "\[\^mean-.*\][^\[]"
它仍然有一些像原来一样的事件,以及在最后一个 之后捕获逗号和冒号]
。grep -o "\[\{1\}\^mean-.*\]"
但这并不能解决问题。我认为它只会捕获一个[
.grep -o "\[\^mean-.*\]\{1\}"
但它也不能解决问题。我认为它只会捕获一个]
.
如何使用 grep 捕获脚注并删除它们(不是用空格替换它们,而是删除它们)?
PS 我在 Windows 上使用 Git Bash,但我认为命令是相同的。
问题在于
.*
你的表达方式,即“贪婪”。这使您的表达式与该]
行的其余部分匹配,直到该行的最后]
一行。相反,让这部分表达式只匹配您自己说它可能匹配的内容,即任何字母数字和-
. 字母数字与 匹配[[:alnum:]]
,并[[:alnum:]-]
允许括号中的表达式也匹配破折号:对您问题中的数据运行此操作:
您的
grep
命令显然会提取匹配项,但不会删除它们。为此,请使用sed
编辑脚本:再加上一些空行和初始空格的删除,
或者,仅修改带有 a 的行
[^mean-...]
,