2009-11-08 2 views
0

J'ai réussi à mettre du texte dans un fichier en les séparant par des lignes vides. J'essaie de ne garder que les paragraphes qui ont une chaîne particulière. Bien que le Sed FAQ mentionne une solution, il ne fonctionne pas (voir exemples ci-dessous)sed flux éditeur unix commande linux: comment conserver un paragraphe avec une chaîne de caractères particulière

http://www.catonmat.net/blog/sed-one-liners-explained-part-two/

58. Print a paragraph that contains “AAA”. (Paragraphs are separated by blank lines). 
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' 

http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf

# print paragraph if it contains AAA (blank lines separate paragraphs) 
# HHsed v1.5 must insert a 'G;' after 'x;' in the next 3 scripts below 
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' 

Pouvez-vous s'il vous plaît me dire pourquoi il ne fonctionne pas. Aussi, si vous connaissez une solution avec un outil Unix ou autre, s'il vous plaît faites le moi savoir.

+2

Ouf, c'est difficile à lire. Pouvez-vous reformater votre question s'il vous plaît? – perimosocordiae

+0

Juste testé cela en saisissant un peu de Lorem ipsum et en remplaçant 'AAA' avec des mots différents, et il semble fonctionner comme annoncé: 'sed -e '/./{H;$!d;}' -e 'x;/Pellentesque /! D; ' lipsum.txt' – opello

+0

Pouvez-vous être plus précis que "ne fonctionne pas"? –

Répondre

0

Pour l'analyse de fichiers, utilisez plutôt gawk. utiliser sed uniquement pour une substitution simple.

awk -vRS= '/AAA/' file 

sortie:

$ more file 
text 
text 
BBB 
text 

text 
text 
AAA 
text 

text 
text 
CCC 
text 

$ awk -vRS= '/AAA/' file 
text 
text 
AAA 
text 
Questions connexes