나는 천천히 내 블로그를 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 용도
?
후속 수량 자가장 짧은 반복을 일치시키기 위해 표준 정규 표현식은 - 이 문제를 해결하기 위해 부정적인 문자 클래스가 사용됩니다.