Sed rechercher/remplacer une seule occurence...
Résoluavion-f16 Messages postés 19255 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Via un sed, je veux remplacer dans un fichier :
$config['default_host'] = 'tls://{{domaine}}';
par :
$config['default_host'] = 'tls://webmail.{{domaine}}';
Je lance donc :
sed -i 's/\$config[\'default_host\'] = \'tls:\/\//{{domaine}}\'/\$config[\'default_host\'] = \'tls:\/\/webmail.{{domaine}}\'/' config.inc.php
J'ai échappé les caractères spéciaux avec \ mais cela ne passe pas. Cela renvoie un >
Je tente de faire un :
sed -i 's/{{domaine}}/webmail.{{domaine}}/1' config.inc.php mais tous les champs {{domaine}} sont modifiés alors que je ne demandais que le premier avec le /1
J'utilise sed 4.7. Une idée ?
Merci
- Sed rechercher/remplacer une seule occurence...
- Rechercher remplacer word - Guide
- Rechercher ou saisir une url - Guide
- Remplacer disque dur par ssd - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Rechercher une chanson - Guide
3 réponses
Bonjour,
Tu peux tout d'abord appliquer une condition et ensuite, faire la substitution :
sed '/default_host/s/example.com/webmail.example.com/g' << "SCRIPT" <?php $config['url'] = 'https://example.com'; $config['default_host'] = 'tls://example.com'; //... SCRIPT
Donne :
<?php
$config['url'] = 'https://example.com';
$config['default_host'] = 'tls://webmail.example.com';
//...
On a donc bien remplacé example.com par webmail.example.com sous condition que la ligne contienne default_host. L'autre ligne n'est pas affectée.
Bonjour,
Dans ce cas :
sed '0,/default_host/{/default_host/s/example.com/webmail.example.com/}' << "SCRIPT" <?php $config['url'] = 'https://example.com'; $config['default_host'] = 'tls://example.com'; $config2['url'] = 'https://example.com'; $config2['default_host'] = 'tls://example.com'; //... SCRIPT
On dit à sed de travailler jusqu'à la première occurrence de "default_host", et de faire la substitution de "example.com" -> "webmail.example.com" uniquement sur les lignes contenant "default_host".
Le résultat est alors
<?php $config['url'] = 'https://example.com'; $config['default_host'] = 'tls://webmail.example.com'; $config2['url'] = 'https://example.com'; $config2['default_host'] = 'tls://example.com'; //...
Super, par contre je ne comprends pas pourquoi je n'arrive à remplacer une seule occurence avec le /1 au lieu du /g
sed '/default_host/s/example.com/webmail.example.com/g'
... et
sed '/default_host/s/example.com/webmail.example.com/1'
... semblent avoir le même effet, alors que je ne voudrais changer que la première ligne qui contient "default_host" dans mon fichier. Or cette variable apparaît plusieurs fois...
Fred
C'est effectivement plus simple...
Merci