extraction d'une partie d'un fichier sous condition (sed) - Shell/Batch - Programmation
Marsh Posté le 02-06-2006 à 15:57:19
aie, sa pique la tête ça!  je pense que je le ferais par prog je ne metrise pas assez sed/awk pour ça.. mais pourquoi ne pas isoler les paragraphes dans un premier temps en cherchant les marqueurs (avec sed), et chercher dedans la presence/absence de tes chaineS? 
 
Marsh Posté le 02-06-2006 à 16:30:57
bon, je reviens à ton problème, codé mais sans sed/awk... façon brutal. le code à la fin est à personnaliser. Par contre curieux de voir le résultat avec sed/awk, le code risque d'etre dense   
  
 
| Code : 
 | 
Marsh Posté le 02-06-2006 à 16:50:20
en perl en une ligne  
 
pour ceux avec XXX 
| Code : 
 | 
 
pour ceux sans: 
| Code : 
 | 
Marsh Posté le 06-06-2006 à 10:51:11
J'ai eu la reponse et j'imagine qu'elle vous interesse. 
 
$ sed -e's/\(^DDD.*\)/RECORD_SEP\1/' -e 's/\(^FFF.*\)/\1RECORD_SEP/' test |awk 'BEGIN{ RS="RECORD_SEP" } /DDD.*XXX.*FFF.*/ { print $0 }' 
DDD blablabla 
blablablaoo 
lsdqkgsqdXXX blablabla 
FFF blablabladd 
$ sed -e's/\(^DDD.*\)/RECORD_SEP\1/' -e 's/\(^FFF.*\)/\1RECORD_SEP/' test |awk 'BEGIN{ RS="RECORD_SEP" } !/DDD.*XXX.*FFF.*/ && /DDD.*FFF.*/ { print $0 }' 
DDDblablabla 
blablablalll 
blablablammmmmmmm 
FFF blablablass 
DDD blablablaqq 
blablablasd 
FFF blablabla 
 
c'est simple et efficace  
Marsh Posté le 07-06-2006 à 17:50:01
ma version, que avec SED : 
 
 
 
cat MonFichier | sed -n '/^DDD/,/^FFF/{ 
H 
/^FFF/g 
} 
/DDD.*.*FFF/{ 
/DDD.*XXX.*FFF/w avec.txt 
/DDD.*XXX.*FFF/!w sans.txt 
s/^.*$// 
x 
} 
' 
 
PS: les retours a la ligne sont necessaires du fait des "{", "}" 
eventuellement, ce qui est en rouge, tu le mets dans un fichier et tu fais  
 
cat MonFichier | sed -n -f FicCommandeSED.txt 
 
 
Marsh Posté le 01-06-2006 à 10:35:11
Extraction de chaine avec sed
Sur Unix, jai un fichier composé de plusieurs paragraphes.
Tous les paragraphes commence par DDD et finissent par FFF.
Certain paragraphes contiennent la chaine XXX.
Exemple
DDDblablabla
blablablalll
blablablammmmmmmm
FFF blablablass
DDD blablabla
blablablaoo
lsdqkgsqdXXX blablabla
FFF blablabladd
DDD blablablaqq
blablablasd
FFF blablabla
sed -en "/^DDD/ , /^FFF/p" -en "/XXX/w resultat" file
extrait tout le fichier moins la ligne contenant XXX
Jai tourné le sed et le awk dans tous les sens mais je navance plus.
Merci