CommentCaMarche
Recherche
Posez votre question Signaler

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

greg5959 5Messages postés vendredi 22 juin 2007Date d'inscription 22 juin 2007Dernière intervention - Dernière réponse le 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
Lire la suite 
Réponse
+5
moins plus
Salut,
sed -i.bak '1 s/motif/remplacement/' fichier
Voir aussi : sed substitution#simplee

;-))
popopopop- 7 sept. 2010 à 20:15
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'
Répondre
jipicy 42923Messages postés jeudi 28 août 2003Date d'inscription ModérateurStatut 7 novembre 2010Derniè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

$

;-)
Répondre
popopopop- 7 sept. 2010 à 20:34
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 
Répondre
jipicy 42923Messages postés jeudi 28 août 2003Date d'inscription ModérateurStatut 7 novembre 2010Derniè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

$
Répondre
popopopop- 7 sept. 2010 à 22:35
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. :)
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
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
;-))
Ajouter un commentaire
Réponse
+1
moins plus
Dsl mais sed --version ne marche pas
Merci
Ajouter un commentaire
Réponse
+1
moins plus
Essaye "sed -v" alors et dans tous les cas "man sed" ;-))
Ajouter un commentaire
Réponse
+0
moins plus
De rien ;-))
greg5959 5Messages postés vendredi 22 juin 2007Date d'inscription 22 juin 2007Derniè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
Répondre
Ajouter un commentaire
Ce document intitulé «  Remplacer chaîne de caractères ds un fichier  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.