Solução usando perl
e GNU sed
perl -pe 's/^[^|]*\|\K(10\d{6}\|)/9$1/' file.txt
sed -r 's/^([^|]*\|)(10[0-9]{6}\|)//' file.txt
Em ambos os casos, você pode adicionar -i.bkp
para alterar o arquivo no local e copiar o arquivo original para file.txt.bkp
ou apenas -i
se o backup não for necessário
Editar:
Obrigado @drg por apontar um erro no perl one-liner .. ^.*?\|
não garantiria a correspondência da segunda coluna. Por exemplo, ab|asd|10017516|asd
seria erroneamente alterado