Você pode deixar as linhas começando com A1 como está e reorganizar as que começam com B1
# if -E or -r is not supported: sed 's/\(B1:.*\)\(A1:.*\)/ /' ip.txt
$ sed -E 's/(B1:.*)(A1:.*)/ /' ip.txt
A1: abc.com B1: Hi there
A1: gml.com B1: Your Test mail
A1: hml.com B1: Your new mail
A1: def.com B1: Test email
A1: yml.com B1: hello world
-
.*é ganancioso, portanto, esta solução assume queA1:eB1:são exclusivos em cada linha -
(B1:.*)(A1:.*)são dois grupos de captura - para satisfazer a expressão inteira, o primeiro capturará todas as sequências de caracteres deB1:até pouco antes deA1:. O segundo capturará string deA1:até o final da linha -
reorganizando as sequências capturadas com espaço entre - Outras leituras: link
Com awk
$ awk -F'A1:' '{print $1 ~ /B1:/ ? FS $2 " " $1 : $0}' ip.txt
A1: abc.com B1: Hi there
A1: gml.com B1: Your Test mail
A1: hml.com B1: Your new mail
A1: def.com B1: Test email
A1: yml.com B1: hello world
Se o primeiro campo contiver B1: , reorganize os campos, caso contrário, imprima a linha de entrada como é