Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: greg.esnaud

Hi world,

Je dois écrire un script chell qui recherche une chaîne de caractère dans des fichiers de conf et doit supprimer un certain nombre de ligne en dessous, exemple:

Fichier smb.conf

[trucmuche]
comment = Gestion du projet trucmuche
path = /home/projets/trucmuche
valid users = +trucmucheRW
write list = +trucmucheRW
read only = yes
force user = trucmuche
force group = trucmucheRW
create mask = 0660
directory mask = 770
browseable = no

Algorithme
rechercher la chaine [trucmuche]
supprimer la ligne [trucmuche] et les 10 lignes en dessous

je voulais faire un grep -A 10 -v [trucmuche] smb.conf > nouveausmb.conf, mais ça marche pas...


Merci de votre aide !

Poste le Wednesday 16 February 2005 13:35:09
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: ceric35

samba ?
il y a forcement 10 lignes ? je pense pas !
le mieux serait jusqu'a la ligne vide suivante non ?

-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Wednesday 16 February 2005 14:44:27
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: KlXt

Salut,

Pertinent ! Tu as une idée derrière la tête?

Merci,

Poste le Wednesday 16 February 2005 15:12:17
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: ceric35

En une instruction ...
... grace au magicien AWK :-))

awk '
BEGIN {
   RS=""
   ORS="\n\n"
   FS="\n"
}
$1!~/^\[trucmuche\]/ {
  print $0
}
' /etc/samba/smb.conf

voila , tout simple n'est-ce pas :-))

si c'est pas exactement ce que tu veut, redemande

-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Wednesday 16 February 2005 15:30:38
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: ceric35

oubli d'un dollar $

awk '
BEGIN {
RS=""
ORS="\n\n"
FS="\n"
}
$1!~/^\[trucmuche\]$/ {
print $0
}
' /etc/samba/smb.conf



-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Wednesday 16 February 2005 15:32:03
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: KlXt

Re,

Merci !

Mais ça n'a marché que comme ça:

Citation

awk '
BEGIN {
RS=""
ORS="\n\n"
FS="\n"
}
$1!~/^\[trucmuche]/ {
print $0
}
' smbtest.conf > smbawk

Est ce normal?

Poste le Wednesday 16 February 2005 15:56:38
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: ceric35

Il y a peut-etre des espaces apres "[trucmuche]"
donc , il vaut mieux ne pas mettre de $

-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Wednesday 16 February 2005 16:22:26
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: MDW

perl -p -ln0n -e 's@[^\n]*?\[truc_muche\].*?(\n.*?){10}@@g;' fichier.txt > nouveaufichier.txt

Poste le Wednesday 16 February 2005 21:47:47
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: floflo

Salut a tous votre discussion m interesse bien !
mais a la difference mon fichier a cette forme

employer Nom = Dupont
Prenom = rogerland
email = balab@..
tel = 06 .....

employer Nom = Minest
Prenom = avardd
email = minar@..
Adresse :25 bd Haussmann 85321 petitVille
tel = 06 .....

et donc j'aimerais ecrire un script shell qui me permettrais de verifier pour chaque employer qu il a bien renseigne son numero de telephone,sachant qu entre chaque enregistrement il y'a un saut de ligne et que le numero de tel n'est pas toujours a la meme position c'est a dire ligne!




Poste le Wednesday 6 April 2005 13:02:50
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: floflo

:-/

Poste le Thursday 14 April 2005 13:04:46
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: marc ferraton

il te faut utiliser awk pour cela

awk (gawk, nawk ..) execute un script en lisant un fichier ligne par ligne
chaque ligne lue est affectée à la variable $0
une ligne est découpée en champ de $1 à $n... (par defaut l'espace, tabulation sont les séparateurs des champs)

donc il te faut ecrire un script sur cette idée

 ----lescript.awk-----
ne pas tenir compte des points en début de ligne c'est juste pour la mise en page .....
BEGIN{
..# procedure executée avant de lire les lignes du fichier
..print "DEBUT" 
..enregistrementencours=0  # variable de memorisation d'un paragraphe en cours 
..# suivant si ton fichier commence ou non par une ligne vide tu devras mettre 1 
..tel=0
..nom="nondefini"
}

{
..# maintenant cette procédure sera executée pour chaque ligne du fichier
..if ( $0 == ""  )
..{ 
....if ( enregistrementencours == 1 )
......# tu viens de lire une ligne vide et tu étais entrain de rechercher dans ton paragraphe
......# la présence du no de tel
......if ( tel == 0 )
......{
.........# tu n'as pas trouvé de numero de tel donc tu signale le nom par exemple
.........print $nom
......}
....}
....else
....{
.......# tu viens de trouver un début de paragraphe donc on memémorise
.......enregistrementencours = 1
.......# tu remets à zero tes memoires
.......tel = 0
.......nom="nondefini"
....}
..}
..else
..{
.....# ici tu vas lire suivant le rangement dans tes paragraphes les diverses informations
.....# donc on les détecte comme çà, et on les memorise pour le changement de paragraphe
.....if ( $0 ~ /*employer nom =*/ ) 
.....{
........nom = $4 
.....}
.....if ( $0 ~ /*tel =*/ )
.....{
........tel = 1
.....}
..}
}

END{
..# cette procedure est executée quand toutes les ligne du fichier on été lue
..print "FIN"
}

tu exécuteras tout çà par
$ awk -f lescript.awk lefichier

Poste le Thursday 14 April 2005 19:03:19
Répondre     Citer    
Re: Recherche d'un paragraphe par mot-clef puis suppression
Envoyé par: floflo

je vais essayer ;-)

Poste le Friday 15 April 2005 11:16:14
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Recherche d'un paragraphe par mot-clef puis suppression
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons