Bonjour a tous,
voici mon problème, dans un même répertoire, j'ai plusieurs fichiers .txt dans lesquels j'ai par exemple ceci :
------------------------------------------------
Titre : incident serveur
Com : Explique comme résoudre le probleme maj RF530
blablablablala
?
Ceci est l'explication pour résoudre le problème
blablablablablablablablblablablablablablablabl
blablablablablablablablblablablablablablablabl
blablablablablablablablblablablablablablablabl
?
----------------------------------------------
Le but du 'jeu' c'est qu'en executant le script avec une variable du style :
./script serveur
que ca scan les .txt et ne m'affiche QUE le texte situé entre le ? et le ?
J'ai lu un post concernant presque la même manip et je suis tombé sur :
sed '/\*{/,/\*}/ s/\*.*//g' nom_fichier | grep -v '^$' >nouveau_fichier
mais ca ne fonctionne pas.
De plus j'ai deja fait ça :
find . -name "*.txt" -type f -exec grep -in $1 {} /dev/null \; | cut -d":" -f1 | cut -d"/" -f2 | sort -u > txt_liste
ca me donne un fichier dans lequel j'ai les noms de fichiers dont l'occurence est présente, ensuuite j'ai ça :
#! /bin/bash
for file in $(cat txt_liste)
do
cat $file
done
mais c'est pas complet, forcement. je pense que le SED devrais se trouver la, et bien sur a terme les 2 scripts ne feront plus qu'un.
J'espère mettre bien fait comprendre.
Merci beaucoup.
# m'être
Posté par mururoa69 . Évalué à 2.
Et non je ne ferais pas le jeu de mot avec mettre et ce que tu peux faire avec ;)
Mais phonetiquement oui, on a bien compris que tu veux qu'on te fasse ton script.
[^] # Re: m'être
Posté par Stéphane CHANDELIER . Évalué à -2.
merci.
# FAQ sed
Posté par Hardy Damien . Évalué à 2.
Dam
[^] # Re: FAQ sed
Posté par Stéphane CHANDELIER . Évalué à 1.
A+
# quelques pistes pour t'aider ...
Posté par totof2000 . Évalué à 3.
for i in *.txt
do
echo "$i"
done
Essaie, tu verras ce que ça fait.
Ensuite pour ce que tu veux faire, awk est ton ami. Seulement faut lui dire un petit truc avant de commencer: pour information, awk traite des enregistrement composés de champs. Les enregistrement sont séparés par un séparateur d'enregistrement qui est le retour chariot par défaut (c'est pour ça que par défaut, awk traite des lignes). Nous on va lui dire de traiter des "lignes séparées non pas par un retour chariot mais par un "?", ce qui donne:
for i in *.txt
do
awk 'BEGIN{ RS="?" } {if (NR==2){print $0}}' $i done
En espérant que ça e convienne ...
NB: je t'ai aidé parce que j'ai vu que tu as un peu cherché.
[^] # Re: quelques pistes pour t'aider ...
Posté par Stéphane CHANDELIER . Évalué à 1.
(ou presque), et je dois avoir 10 crous de VBA dans les pattes, pour te donner mon niveau.
Mais j'ai la logique de code, et c'est ça le plus important, quoi qu'il en soit, merci pour ton aide, j'étais parti sur du awk
effectivement mais j'avoue avoir quelques problèmes avec les expressions régulière.
Merci encore pour ton aide.
[^] # Re: quelques pistes pour t'aider ...
Posté par totof2000 . Évalué à 3.
awk 'BEGIN {RS="?"} NR==2' $i
[^] # Re: quelques pistes pour t'aider ...
Posté par Stéphane CHANDELIER . Évalué à 0.
# Imprécis
Posté par lcld . Évalué à 2.
$ cat tst
------------------------------------------------
Titre : incident serveur
Com : Explique comme résoudre le probleme maj RF530
blablablablala
?
Ceci est l'explication pour résoudre le problème
blablablablablablablablblablablablablablablabl
?
------------------------------------------------
Titre : incident serveur
Com : Explique comme résoudre le probleme mAj RF530
blAblAblAblAlA
?
Ceci est l'explicAtion pour résoudre le problème
blAblAblAblAblAblAblAblblAblAblAblAblAblAblAbl
?
------------------------------------------------
$ sed '/^?$/,/^?$/!d;/^?$/d' tst
Ceci est l'explication pour résoudre le problème
blablablablablablablablblablablablablablablabl
Ceci est l'explicAtion pour résoudre le problème
blAblAblAblAblAblAblAblblAblAblAblAblAblAblAbl
Mais j'imagine que tu veux un séparateur...
[^] # Re: Imprécis
Posté par Stéphane CHANDELIER . Évalué à 0.
# Voici donc la réponse :
Posté par Stéphane CHANDELIER . Évalué à 0.
Voici donc la page HTML qui le suporte :
--------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML VERSION="2.0">
<HEAD>
<TITLE>Recherche d'occurrences dans les fichiers textes</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<table border=0 width=100%>
<tr>
<P><td align=left valign=middle></P>
<P><B><FONT SIZE="6">Direction Informatique</FONT></B></P>
<P><B><FONT SIZE="4">Recherche d'occurrences dans les fichiers textes</FONT></B></P>
<P></td><td align=right valign=middle></P>
<P ALIGN="RIGHT"><IMG SRC=file:///W:/cgi-bin/dslogo.gif ALIGN="TOP" WIDTH="170" HEIGHT="60" ></P>
<P></td>
</tr>
</table></P>
<H1><FONT SIZE="2"><A HREF="/index.html">[Accueil]</FONT></A></H1>
<HR>
<FORM METHOD="POST" ACTION="http://infotst.dsp.ds/cgi-bin/recherche/cherche.cgi">
<P><INPUT TYPE="TEXT" NAME="chaine" SIZE="25"></P>
<P><INPUT TYPE="SUBMIT" NAME="recherche" VALUE="Recherche"><B> </B>
<INPUT TYPE="RESET" NAME="annule" VALUE="Annule"></P>
</FORM>
<HR>
<TABLE ALIGN=ABSCENTER CELLSPACING=0 CELLPADDING=0 WIDTH="100%" >
</TABLE>
</BODY>
</HTML>
--------------------------------------------------------------------------
Et voici le CGI-BIN :
--------------------------------------------------------------------------
#! /bin/sh
umask 002
echo Content-type: text/html
echo
echo '<FONT >'
echo '<H2><TT>'
PATH=":/srv/www/cgi-bin:"$PATH ; export PATH
info=`cat - `
info=`echo $info | tr '&' ' ' `
for i in `echo $info `
do
cmd=`echo $i | cut -f1 -d= `
par=`echo $i | cut -f2 -d= `
case $cmd in
chaine ) chaine=$par ;;
file ) file=$par ;;
esac
done
echo "You are looking for occurrence : $chaine"
echo '<BR>'
# le code
a=`find . -name "*.txt" -type f -exec grep -in $chaine {} /dev/null \; | cut -d":" -f1 | cut -d"/" -f2 | sort -u`
echo "File(s) where occurrence were found : $a"
echo '<BR>'
for i in $a
do
echo '<BR>'
echo "Result : "
echo '<BR>'
awk 'BEGIN { RS="?" } NR==2' $i
echo '<BR>'
done
echo '</TT></H2>'
echo ' </FONT>'
--------------------------------------------------------------------------
ca marche impec !
A+++
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.