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/)
  • 이것은 원래 표현식과 정확히 동일하지만 파일을 한 줄씩 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 용도?후속 수량 자가장 짧은 반복을 일치시키기 위해 표준 정규 표현식은
  • 이 문제를 해결하기 위해 부정적인 문자 클래스가 사용됩니다.

관련 정보