[Résolu] Bash, je bute!

Bonjour,

Je suis en train de me faire un petit script en bash. Et je bute sur un truc. J’aimerais supprimer une ligne dans un fichier. Je sais comment en ajouter une, mais, j’ai besoin de faire l’inverse également.

Là je rajoute donc la ligne ‘include /etc/bind/domain.tld.conf’; dans le fichier named.conf

Mais pour la supprimer je fais comment? Merci :wink:

Bonjour,
Là tu rajoutes 3 lignes dans ton fichier :

  • ligne vide
  • ligne
  • ligne vide

De plus, tu mets les caractère ’ ’ dans la ligne que tu imprimes … ce n’est pas une ligne destinée à être exécutée lorsquelle est lue ?

sinon tu peux faire un truc du style :

while read ligne  # Pour toutes les lignes du fichier...
do
  case $line in
    'include /etc/bind/domain.tld.conf' ) ;;
    *)
        echo "$line" >> /tmp/tmpnamed.conf ;;
   esac
done < /etc/bind/named.conf
cat /tmp/tmpnamed.conf > /etc/bind/named.conf

Aprés tu peux aussi passer la ligne à rechercher à ton script ou ta fonction. Je suis aussi curieux de savoir la commande basique qui permet de faire une suppression de ligne dans un fichier, elle doit exister …

Je viens de tester et malheuresemet, sa vient de me créer un fichier tmpnamed.conf vide, et le fichier named.comf est également vide.

Si le fichier est lu, c’est la syntaxe utilisé dans le fichier named.conf.

Oui c’est sur que si on lit “ligne” et qu’on teste “line”, ya qu’un programme en esperanto qui va capter … :smiling_imp:

motif='include /etc/bind/domain.tld.conf' while read ligne ; do echo "$ligne" | grep -v "$motif" >> /tmp/tmpnamed.conf done < /etc/bind/named.conf cat /tmp/tmpnamed.conf > /etc/bind/named.conf rm /tmp/tmpnamed.conf

Faudrait penser à faire une sauvegarde de fichier ptêtre …

Oui oui j’avais fais une sauvergarde avant :wink:

Merci sa fonctionne :smiley:

J’ai parler un peut trop vite!

Je me suis trompé, ma ligne qui est dans named.comf est comme celà

En la mettant comme cleà dans le motif, sa ne fonctionne plus. Je joue avec es ’ ’ et des " " mais je ne parvient pas a faire ce que je souhaite :frowning: Si je met un truc simple comme j’ai fait test.com, là sa fonctionne. Je suis désolé, mais je débute dans le bash, et la plupart des sites que je trouve sont en anglais :frowning:

Petite question HS désolé.
Tu relances ton serveur DNS après l’ajoute de la modif de named.conf ?

[quote=“usinagaz”]e :
Je suis aussi curieux de savoir la commande basique qui permet de faire une suppression de ligne dans un fichier, elle doit exister …[/quote]
Je ne vais pas répondre directement à ta question mais sous ‘VI’ on supprime la ligne courante avec
dd
Il ya ptet un appel à faire ds ce sens, non ?

[quote=“paflechien”]Bonjour,

Je suis en train de me faire un petit script en bash. Et je bute sur un truc. J’aimerais supprimer une ligne dans un fichier. Je sais comment en ajouter une, mais, j’ai besoin de faire l’inverse également.

Là je rajoute donc la ligne ‘include /etc/bind/domain.tld.conf’; dans le fichier named.conf

Mais pour la supprimer je fais comment? Merci :wink:[/quote]

sed.sourceforge.net

[quote=“goldyfruit”]Petite question HS désolé.
Tu relances ton serveur DNS après l’ajoute de la modif de named.conf ?[/quote]

oui

Sinon j’ai fais comme ceci avec la manière de usineagaz. Ce n’ai pas très propre je le reconnais!

Bonjour,
en fait, il faut utiliser les caractères d’échappement :

[quote]motif=“include “’”/etc/bind/’”$domaine.conf"’"’";"[/quote] peut s’écrire [quote]motif=“include “/etc/bind/$domaine.conf”;”[/quote] ou quelquechose comme ça …

Mais l’utilisation de sed est bien mieux, reste à étudier sed pour voir comment tu places le $motif en paramètre … Pour débuter en bash, j’ai planché là-dessus :
abs.traduc.org/abs-3.9-fr/index.html

Ricardo, un appel comment ça ?

Je sais (en tout cas je crois bien) qu’il est possible avec une option de faire une expression régulière correspondant à plusieurs lignes dans sed mais je ne retrouve plus la méthode.

Sinon pourquoi pas

$ grep -v “include /etc/bind/domain.tld.conf” /etc/bind/named.conf > /tmp/named.conf
$ mv /tmp/named.conf /etc/bind

?

Bien sur :stuck_out_tongue: encore mieux …
ps: c’est que je suis sur les boucles en ce moment, alors j’en mets partout … lol

penser à utiliser $$ (le pid) pour créer les temp.

Merci les gars :wink: Sa fait un peu plus propre comme celà :slightly_smiling:
Je vais testé sed pour voir, sa a l’air pas mal comme fonction en effet

C’est pas plutot une bonne raison pour apprendre sed?
Nan parceque dans /etc/init.d c’est un peu utilisé quand meme…
Avec awk au pire faut le faire, mais pas avec un truc sur plusieurs lignes… enfin c’est mon opinion.
C’est pas compliqué pourtant ma ligne? Et ca fait une sauvegarde…

Si vous voulez faire du scripting, planchez sur sed, awk et avec du temps sur perl.
A la limite awk seulement car il permet de remplacer sed et est très simple.

quote="BorisTheButcher"
Si vous voulez faire du scripting, planchez sur sed, awk et avec du temps sur perl.
A la limite awk seulement car il permet de remplacer sed et est très simple.[/quote]+1, rappelez vous le K&R: sous unix, tout est flot et grep, sed et awk sont tes amis.
Depuis, Larry est passé par là, et perl fait tout ça tout seul. :wink:

Moui perl c’est au programme… Je commence petit a petit avec le bash puis perl, et pour celà il me faudra du temps!