Regular-Expression
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]
當兩個或多個腳註出現在同一行時,就會出現問題,正則表達式會延伸到最後一次出現的 a
]
。我也試過:
grep -o "\[\^mean-.*\][^\[]"
它仍然有一些像原來一樣的事件,以及在最後一個 之後擷取逗號和冒號]
。grep -o "\[\{1\}\^mean-.*\]"
但這並不能解決問題。我認為它只會擷取一個[
.grep -o "\[\^mean-.*\]\{1\}"
但它也不能解決問題。我認為它只會擷取一個]
.如何使用 grep 擷取腳註並刪除它們(不是用空格替換它們,而是刪除它們)?
PS 我在 Windows 上使用 Git Bash,但我認為命令是相同的。
問題在於
.*
你的表達方式,即“貪婪”。這使您的表達式與該]
行的其餘部分匹配,直到該行的最後]
一行。相反,讓這部分錶達式只匹配您自己說它可能匹配的內容,即任何字母數字和-
. 字母數字與 匹配[[: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,
或者,僅修改帶有 a 的行
[^mean-...]
,sed '/\[\^mean-[[:alnum:]-]*\]/{ s///g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//; }' file