Remplacement de chaîne dans une position spécifique entre des délimiteurs connus en shells

J’ai un fichier avec des données stockées dans ce format

ID;Name;Surname;Country 

Et je dois pouvoir trouver et remplacer une donnée spécifique en connaissant simplement l’ID et la position des données en utilisant ‘;’ en tant que délimiteurs.

Un peu comme le résultat de

grep -n “ID” [fichier] | cut -d “;” -f [position]

Mais remplacer par une chaîne utilisateur au lieu d’afficher

Je pense que je dois utiliser sed mais rien de ce que j’ai trouvé n’a fonctionné.

Edit: l’utilisateur viendrait d’un menu où il choisirait quoi modifier et fournir l’ID, il serait alors invité à saisir la chaîne de remplacement et à connaître la structure des données stockées (ID / Nom / Nom / Pays) chaîne serait remplacé en conséquence dans le fichier texte.

avec awk:

 echo 'ID;Data1;Data2;Data3' | awk -v id="ID" -v col=3 -v repl="foo" -F';' 'BEGIN{OFS=";";} $1==id {$col=repl;}1' 

Sortie:

 ID; Data1; foo; Data3