(4 réponses)
Fermé il y a 2 ans.
J'ai un fichier contenant des lignes :
india;austria;japan;chile
china;US;nigeria;mexico;russia
Je veux remplacer toutes les occurrences de point-virgule sur chaque ligne par ex. ;NEW;
, mais à partir de la 2e occurrence seulement. Le résultat devrait ressembler à ceci :
india;austria;NEW;japan;NEW;chile
china;US;NEW;nigeria;NEW;mexico;NEW;russia
J'ai essayé ceci avec gsub, mais cela remplace toutes les occurrences :awk '/;/{gsub(/;/,";NEW;") }{print}'
Réponse acceptée :
Le awk
solution est beaucoup plus longue, mais il est plus simple de la rendre générique :
awk -F; '{for(i=1;i<NF;i++)printf"%s;%s",$i,(i>=2)?"NEW;":"";print$NF}' replacefile
Est-il possible de le faire avec sed
aussi, en faisant une boucle avec le t
commande et en remplaçant toujours le 2ème séparateur (ou celui que vous voulez) par une marque temporaire (généralement n
):
sed ':b;s/;/n/2;tb;s/n/;NEW;/g' replacefile