Remplacer chaîne de caractères ds un fichier [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
22 juin 2007
-
 popopopop -
Bonjour

Quel est la commande Unix pour remplacer une chaîne de caractère par une autre dans la première ligne d'un fichier ( et uniquement dans la première) ?

Merci pour votre aide


Greg

5 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
Salut,
sed -i.bak '1 s/motif/remplacement/' fichier
Voir aussi : sed substitution#simplee

;-))
5
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Merci encore vraiment, mais je n'y arrive toujours pas je ne comprends pas pourquoi

Pour effectuer les modifications suivantes et remplacer :
*/30 * * * * /usr/bin/ >/dev/null 

par
*/30 * * * * /usr/bin/commande1 >/dev/null 

J'ai fais ceci mais aucune modification n'est apportée au fichier :
find . -name "test" -print | xargs sed 's#*/30 * * * * /usr/bin/ >/dev/null#*/30 * * * *  /usr/bin/commande1 >/dev/null#g'
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
$ cat plop
*/30 * * * * /usr/bin/ >/dev/null

$ sed 's#/usr/bin/#&commande1#' plop
*/30 * * * * /usr/bin/commande1 >/dev/null

$

;-)
presque, mais ça m'apprendra à simplifier mon problème...

$ cat test 
*/30 * * * * /usr/bin/ >/dev/null 
*/40 * * * * /usr/bin/toto  >/dev/null 
$  sed 's#/usr/bin/#&commande1#' test 
*/30 * * * * /usr/bin/commande1 >/dev/null 
*/40 * * * * /usr/bin/commande1toto >/dev/null 


Et si je fais

 sed 's#*/30 * * * * /usr/bin/#&commande1#' test 
*/30 * * * * /usr/bin/ >/dev/null 
*/40 * * * * /usr/bin/toto >/dev/null 
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
$ cat plop
*/30 * * * * /usr/bin/ >/dev/null
*/40 * * * * /usr/bin/toto >/dev/null

$ sed '\#^*/30# {s#/usr/bin/#&commande1#}' plop
*/30 * * * * /usr/bin/commande1 >/dev/null
*/40 * * * * /usr/bin/toto >/dev/null

$
jipicy, vraiment merci beaucoup. J'ai changé le crontab de 7000 utilisateurs en quelques minutes et en plus j'ai parfaitement compris ta solution (avec une petite plongée dans le man et google). Vraiment merci beaucoup pour ce coup de main. :)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
Quelle version de "sed" utilises-tu ?
sed --version
Pour que la modification soit prise en compte il faut une version supérieure à 4.0.5, sinon il faut passer par un fichier temporaire :
sed '1 s/motif/remplacement/' < fichier > fich.tmp && mv -f fich.tmp fichier
;-))
Messages postés
5
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
22 juin 2007
1
Dsl mais sed --version ne marche pas
Merci
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
Essaye "sed -v" alors et dans tous les cas "man sed" ;-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
De rien ;-))
Messages postés
5
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
22 juin 2007
1
Excuse moi mais je viens d'essayer et je pense que le sed ne répond pas à mes attentes car je souhaiterais que la modif soit enregistrée dans le fichier ( et pas seulement éditée)
et apparmeent le -i.bak ne marche pas

Merci