Menu

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

greg5959 5 Messages postés vendredi 22 juin 2007Date d'inscription 22 juin 2007 Dernière intervention - 22 juin 2007 à 10:18 - Dernière réponse :  popopopop
- 7 sept. 2010 à 22:35
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
Afficher la suite 

18 réponses

jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 17 mars 2018 Dernière intervention - 22 juin 2007 à 10:41
+5
Utile
12
Salut,
sed -i.bak '1 s/motif/remplacement/' fichier
Voir aussi : sed substitution#simplee

;-))
Cette réponse vous a-t-elle aidé ?  
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'
jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 17 mars 2018 Dernière intervention - 7 sept. 2010 à 20:21
$ 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 
jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 17 mars 2018 Dernière intervention - 7 sept. 2010 à 20:37
$ 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. :)
jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 17 mars 2018 Dernière intervention - 22 juin 2007 à 11:54
+1
Utile
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
;-))
greg5959 5 Messages postés vendredi 22 juin 2007Date d'inscription 22 juin 2007 Dernière intervention - 22 juin 2007 à 14:04
+1
Utile
Dsl mais sed --version ne marche pas
Merci
jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 17 mars 2018 Dernière intervention - 22 juin 2007 à 14:09
+1
Utile
Essaye "sed -v" alors et dans tous les cas "man sed" ;-))
jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 17 mars 2018 Dernière intervention - 22 juin 2007 à 11:32
0
Utile
1
De rien ;-))
greg5959 5 Messages postés vendredi 22 juin 2007Date d'inscription 22 juin 2007 Dernière intervention - 22 juin 2007 à 11:50
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