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 -
- 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 é