Você está simplesmente procurando por isso?
sed -i '\%/\([^/:]*\):Tag=%n;s%%/\(\([^/:]*\):Tag=\)[^/:-]*-[^/:-]*%%' *.j1
(Tente sem o -i para ver a saída sem gravar de volta no arquivo original - canalize para less para que você possa pausar e rolar para frente e para trás.)
Os parênteses na primeira expressão procuram uma string entre uma barra e dois pontos; se acharmos isso imediatamente seguido por Tag= e a mesma string que combinou entre parênteses, estamos bem. Os parênteses invertidos capturam essa string para que possamos nos referir a ela como .
Se não encontrarmos esse padrão, a string após Tag= deverá ser diferente da string capturada; se assim for, substitua a string após Tag= com a string capturada. A expressão regular substitui uma sequência que contém um único traço e, de outro modo, nenhum traço, ponto e vírgula ou barra (portanto, até pouco antes do segundo traço ou da primeira barra ou dois-pontos).
Se você estiver em * BSD (incluindo o Mac OS), precisará de -i '' em vez de apenas -i .
Para outra abordagem, você pode refatorar seus mapeamentos para um script sed . Se você tiver um arquivo incorrect_tags.txt like
"BA-02-1" "BA-03"
"BA-02-2" "BA-04"
então você pode executar o seguinte script
sed 's%^"%s/%;s%" "%/%;s%"$%/g%' incorrect_tags.txt
que produz ... outro script sed que agora parece
s/BA-02-1/BA-03/g
s/BA-02-2/BA-04/g
que você pode passar para outra instância de sed para modificar os arquivos que contêm esses tokens que você deseja substituir.
O pipeline completo é então
sed 's%^"%s/%;s%" "%/%;s%"$%/g%' incorrect_tags.txt |
sed -i -f - *.j1
e, novamente, você pode querer tentar sem -i primeiro para ver como é a saída. Além disso, seu sed pode não gostar da opção -f ou pode não suportar a leitura de um script na entrada padrão; talvez então simplesmente salve a saída da primeira invocação de sed para um arquivo temporário e então dê o nome do arquivo temporário como o argumento do nome do arquivo para -f .
Observe que isso exigirá que as tags não sejam sobrepostas - se você substituir A por B e B por C, o resultado final será como se você tivesse especificado "A" "C". Uma solução alternativa é trocar a ordem de modo que B seja substituído por C primeiro, e somente então A com B.