Você pode fazer isso em Perl:
$ perl -lne 'if(/A=([^\s]+)/){print "A : $1"; 'scriptA.sh'}
if(/B=([^\s]+)/){print "B : $1"; 'scriptB.sh'}' Data.txt
Explicação
-
-lne: remova as novas linhas à direita de cada linha de entrada e adicione uma nova linha a cada chamada deprint(-l); leia o arquivo linha por linha (-n) e execute o script fornecido por-eem cada linha. -
if(/A=([^\s]+)/){print "A : $1"; 'scriptA.sh'}: se essa linha corresponder aA=something, imprimaA : something(os parênteses significam que o padrão é capturado e agora é salvo como$1) e, em seguida, executescriptA. -
if(/B=([^\s]+)/){print "B : $1"; 'scriptB.sh'}: como acima, mas para B.
Ou você pode simplesmente extrair os valores e analisá-los:
$ grep -Po '[AB]=[^\s]+' Data.txt |
while IFS="=" read name val; do
echo "$name=$val";
[ "$name" = "A" ] && scriptA.sh || scriptB.sh;
done
Explicação
-
grep -Po '[AB]=[^\s]+' Data.txt: o-Pativa PCREs , e o-ofará com quegrepimprima cada correspondência uma linha diferente. O[AB]=[^\s]+significa "corresponder A ou B e, em seguida,=, em seguida, quantos caracteres não-whitespace forem possíveis. A saída disso é a coleção completa deA=fooeB=barde seu arquivo de entrada, cada um em seu própria linha. -
while IFS="=" read name val: defina o separador de campo ionput como=e leia duas variáveis. Isso significa que$nameseráAouBe$valueserá o valor associado a eles. -
echo "$name=$val";: imprima-os, altere o formato para o que quiser. -
[ "$name" = "A" ] && scriptA.sh || scriptB.sh;: se$nameforA, executescriptA.sh, caso contrário, executescriptB.sh. Ambas as soluções acima assumem que os scripts que você deseja chamar sãoscriptA.shescriptB.she que estão em seu $ PATH. Edite de acordo.