Sed
使用 sed 正則表達式將 html 錨點轉換為 markdown
我一直在慢慢地將我的部落格轉換為降價。最後要做的是用markdown替換所有的html錨。
我提出了這個 sed 正則表達式,從所有意圖和目的來看,它都應該做我想做的事,但事實並非如此。
源數據:
$ cat /tmp/test on <a href="https://www.reddit.com/" target="_blank" rel="noopener">reddit</a> or <a href="https://lifehacker.com/" target="_blank" rel="noopener">Lifehacker</a>
sed 命令:
$ sed -r 's/<a.*?href="(.*?)".*?>(.*?)<\/a>/[\2](\1)/g' /tmp/test on [Lifehacker](https://lifehacker.com/" target="_blank" rel="noopener)
我希望它返回:
on [Reddit](https://reddit.com/) or [Lifehacker](https://lifehacker.com/")
sed
使用基本和擴展的正則表達式 (BRE/ERE)。.*?
是 Perl 兼容正則表達式 (PCRE) 的一部分。要使用 PCRE,請使用
perl
:$ perl -pe 's/<a.*?href="(.*?)".*?>(.*?)<\/a>/[\2](\1)/g' test on [reddit](https://www.reddit.com/) or [Lifehacker](https://lifehacker.com/)
- 這與原始表達式完全相同,但用於逐行
perl -p
讀取和列印文件 - 就像sed
這是使用 ERE 的類似正則表達式
sed
:$ sed -E 's/<a[^>]*href="([^"]*)[^>]*>([^<]*)[^>]*>/[\2](\1)/g' test on [reddit](https://www.reddit.com/) or [Lifehacker](https://lifehacker.com/)
- PCRE 使用跟隨
?
量詞來匹配最短重複,標準正則表達式不- 否定字元類用於解決此問題