Salut les forumeurs,
Voilà, donc, j'ai un fichier (test.conf) qui contient des noms de domaines :
local-zone: "google.com" redirect
local-data: "google.com A 0.0.0.0"
et un j'ai script bash qui sera exécuté par l'utilisateur :
read -p "- The domain : " domain
look=$(cat test.conf | grep "$domain")
sed 's/'$look'/^#/' test.conf
Donc, l'objectif du script, c'est qu'il demande un domaine (ex: google.com) à l'utilisateur, et le script ajoute un caractère (#) en début de ligne dans le fichier (test.conf).
Ca fait un petit moment que j'essaye de me battre contre la syntaxe de sed, mais sans résultat, donc, je m'en remet à l'intelligence collective.
Merci d'avance.
# référence arrière
Posté par gaaaaaAab . Évalué à -1.
Avec la commande de substitution (s), quand tu fais la sélection d'un motif par sed, tout le motif est remplacé par l'instruction que tu donnes en seconde partie (ici #). Si tu veux conserver tout ou partie du motif de départ, il faut l'indiquer à sed.
relis de plus près la doc sur le remplacement, et notamment les références arrière.
[^] # Re: référence arrière
Posté par 1984 . Évalué à 2.
J'ai bien pris en compte ton commentaire, et j'obtiens ce résultat :
Sauf, que j'obtiens cette erreur :
bash
sed: -e expression #1, char 35: unterminated `s' command
# Exemple
Posté par Kerro . Évalué à 3.
Quelque chose comme :
sed 's/^\(.*'$look'.*\)$/#\1/'
^ = depuis le début de la ligne
.* = tous les caractères
$look = jusqu'au nom de domaine
.* = tous les caractères
$ = jusqu'à la fin de la ligne
\(…\) = mémoriser cette suite de caractères dans le premier tampon mémoire disponible (donc le numéro 1 dans ce cas)
\1 = écrire le contenu du tampon mémoire numéro 1
Attention, si la personne tape une ligne vide, ou « redirect » ou d'autres choses, ça ne va pas donner le résultat voulu.
[^] # Re: Exemple
Posté par 1984 . Évalué à 2.
Merci de prendre le temps de m'aider :) La commande fonctionne quand j'ai des noms de domaines comme : "domaine.com" dans le fichier test.conf, mais elle ne marche pas si j'ai des noms de domaine comme : "www.domaine.com", et j'obtiens cette erreur :
Merci, tu m'as déjà donné beaucoup d'info, je vais continuer de chercher, bonne soirée.
# Il faut protéger la variable, et corriger la commande sed
Posté par wismerhill . Évalué à 7. Dernière modification le 27 mai 2018 à 22:30.
D'abord, si la variable $look contient des caractères particulier (ne serait-ce qu'un espace!), ça ne va pas donner ce que tu espèce.
Il faut la protéger avec des guillemets doubles:
Mais puisque le reste de la commande sed ne contient pas de $, on peut faire plus simple:
Ensuite, cette commande sed ne fait pas ce que tu crois, elle va remplacer la valeur contenue dans $look par la série de caractères "#".
Mais en fait, toute la ligne qui affecte une valeur à look ne sert à rien (et contient un UUOC).
Tu peux simplement faire
Cette version utilise une adresse, sous forme d'expression rationnelle, pour déterminer à quelles lignes appliquer la commande s, cette dernière se contente de faire un match sur le début de la ligne, et le remplacer par un #.
Et au moins, cette version fonctionnera correctement si plus d'une ligne dans le fichier contient de domaine recharché.
Note que si $domain contient des caractères spéciaux pour sed, ça ne fonctionnera pas.
Au minimum, puisqu'il doit s'agir de noms de domaine, il faudrait échapper les points, tu peux utiliser la syntaxe du shell pour ça avec l'expansion du type ${PARAMETER/PATTERN/STRING}, ça donne
Je n'ai pas testé, mais cette version à plus de chance de fonctionner.
[^] # Re: Il faut protéger la variable, et corriger la commande sed
Posté par 1984 . Évalué à 1.
Merci de prendre le temps de m'aider, et effectivement la variable $look est totalement inutile. Cette fois-ci j'ai repris ton exemple pour supprimer un caractère (#).
Merci et bonne journée.
[^] # Re: Il faut protéger la variable, et corriger la commande sed
Posté par 1984 . Évalué à 1.
https://fr.wikipedia.org/wiki/Cat_(Unix)#Cat_et_UUOC
Je me coucherais moins bête.
[^] # Re: Il faut protéger la variable, et corriger la commande sed
Posté par wismerhill . Évalué à 2.
Là, tu supprime le caractère # où qu'il se trouve dans la ligne.
Si tu veux le supprimer uniquement s'il est au début de la ligne, c'est plutôt ça qu'il faut faire:
# Commentaire supprimé
Posté par oukitel . Évalué à 1. Dernière modification le 26 juin 2018 à 13:34.
Ce commentaire a été supprimé par l’équipe de modération.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.