Supondo que você esteja usando o GNU sed, uma maneira é
sed 's/\([[:space:]]\|[[:punct:]]\)i\([[:space:]]\|[[:punct:]]\)/I/g'
ou algo parecido. Isso ainda deixa o caso da linha começando com 'eu gosto de cachorros' porque não há espaço antes do pronome. Uma maneira de corrigir isso é
sed 's/\(^\|[[:space:]]\|[[:punct:]]\)i\([[:space:]]\|[[:punct:]]\)/I/g'
Isso ainda deixa o caso quando você tem um 'i' consecutivo como em "ii", mas não consigo pensar em nenhuma razão para que isso ocorra no texto em inglês, exceto quando alguém erroneamente escreveu 'ii sir' quando a frase correta é "sim, sim senhor".
Há também arestas ásperas se você também usa numerais romanos em letras minúsculas. O script sed não será capaz de dizer se 'i' é um pronome ou o numeral romano, mas realmente não há uma boa solução para esse.