$ perl -lwe '$_="[http://a|alpha] [http://b|beta] [http://g]"; print; s{ \[ (http://.+?) (?: \| (.+?) )? \] } { qq!! . (defined $2 ? $2 : $1) . qq!\n! }giex; print' [http://a|alpha] [http://b|beta] [http://g] alpha beta http://g