私は自分のブログをゆっくりとマークダウンに変換してきました。最後に行うことは、すべての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/)
sed
のようにファイルを1行ずつ読み取って出力するPerl -p
で使用されます。sed
でEREを使用する同様の正規表現を次に示します。
$ sed -E 's/<a[^>]*href="([^"]*)[^>]*>([^<]*)[^>]*>/[\2](\1)/g' test
on [reddit](https://www.reddit.com/) or [Lifehacker](https://lifehacker.com/)
?
に続く量指定子 を使用して最短の繰り返しに一致しますが、標準の正規表現では一致しません