sed正規表現を使用してhtmlアンカーをマークダウンに変換する

sed正規表現を使用してhtmlアンカーをマークダウンに変換する

私はゆっくりと私のブログを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/")

答え1

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/)
  • これは元の式とまったく同じですが、ファイルを1行ずつ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用途?後続の数量者最も短い反復を一致させるために、標準正規表現は
  • この問題を解決するために、負の文字クラスが使用されます。

関連情報