Bonjour à tous,
Une petite question concernant la commande sed.
Voila mon problème. J'ai un fichier texte (toto.txt) qui contient 3 colonnes de nombres. Je dois remplacer à la ligne N (=15 par ex) le champ 3 par une chaine que je noterai newstr. Le champ 3 est une chaine que j'appelle oldstr.
fichier: str1 str2 oldstring
Jusqu'à présent, je faisais:
sed -i '15 s/oldstr/newstr/' toto.txt
resultat --> str1 str2 newstring
donc cela marche très bien sauf si le champ 2 a la même valeur que le champ 3:
fichier: str1 oldstr oldstr
Car dans ce cas il me remplace le champ 2.
Je sais qu'il existe de nombreuses solutions, mais j'en cherche une simple qui puisse alléger mon code; en indiquant juste le numéro du champ qui m'interesse (et que je connais a priori).
Merci d'avance!
teab

Toutefois, elle me semble limitée. Je m'explique. Imaginons que j'ai en fait cette ligne:
4 olstr oldstr oldstr
Je veux cette fois remplacer uniquement le deuxième champ par newstr. C'est faisable avec la première méthode que tu avais proposé, mais cela m'oblige à rajouter une ligne de code en faisant une boucle conditionnelle. C'est pour ça que je cherchais une méthode qui me permettre de spécifier le numéro du champ et non de l'occurence.
Tu vois ce que je veux dire?
Si tu n'as pas mieux ce n'est pas grave, c'est déjà très bien!
une méthode qui me permettre de spécifier le numéro du champ et non de l'occurence.
Sed n'est pas fait pour ça ;-(
Sed est un éditeur de flux orienté ligne et non un éditeur de flux orienté champ. Pour ça il te faut te tourner vers "awk", qui lui est prévu pour traiter les "champs".
J'arrive à l'utiliser pour la lecture de fichier, mais pas pour le remplacement!