$ perl -lwe \ '$_="[http://a|alpha] [http://b|beta] [http://g]"; print; # match with title s{\[(http://[^\]\|]+)\|([^\]]+)\]} {$2\n}gi; # match without title s{\[(http://[^\]\|]+)\]} {$1\n}gi; print' [http://a|alpha] [http://b|beta] [http://g] alpha beta http://g