Eu o mantenho simples:
sed '/command/s/[^;]*;keyword/INSERTED_STRING;&/'
para inserir dois campos antes da palavra-chave. A solução geral seria
sed "/command/s/\([^;]*;\)\{$N\}keyword/INSERTED_STRING;&/"
mas observe que o N tem uma rede de 1 em comparação com a sua pergunta: Aqui, N=2 significa ter dois campos entre a inserção e o keyword .
Explicação: /command/ seleciona apenas linhas com command , portanto outras linhas permanecem inalteradas. ([^;]*;\) corresponde a um campo (uma sequência de semicolons) incluindo o ponto e vírgula a seguir. Seguindo-o com \{$N\} , o padrão corresponde a $N fields. O seguinte keyword conclui isso para corresponder aos campos keyword e $N antes. O padrão de substituição consiste na string inserida e & , que é substituído por tudo que foi correspondido (então, no final, não foi uma substituição, mas uma inserção).
Em curto e melhor legível com expressões regulares estendidas:
sed -E "/command/s/([^;]*;){$N}keyword/INSERTED_STRING;&/"