7
votes

grep tous les caractères y compris nouvelle ligne

Je parse un fichier XML avec xxx

Comment puis-je utiliser grep pour obtenir tout dans "{{" et "}}" étant donné que le grep . Le caractère ne reconnaît pas les nouvelles lignes neuves?

J'ai actuellement xxx

mais cela ne fonctionne que sur des choses qui sont sur la même ligne.


0 commentaires

4 Réponses :


8
votes

Une option est de supprimer la nouvelle ligne, puis de GREP, comme dans: xxx pré>

mais si vous dites ceci est un fichier XML, pourquoi ne pas utiliser un analyseur XML qui profite du fichier structure inhérente plutôt que juste regexp? p>

edit forte> p>

grep regexp sont gourmands, vous pouvez utiliser Perl Regexp: P>

cat myfile | tr -d '\n' | perl -pe 's/.*?({{.*?}})/\1\n/g' | grep {{


1 commentaires

Il fait le chat mais maintenant le grep ne fonctionne pas - il renvoie tout le dossier. Ce qui donne?



1
votes

Vous pouvez utiliser une alternance entre des ensembles de caractères mutuellement exclusifs pour correspondre vraiment à n'importe quel caractère. Par exemple, cette commande:

grep -E "\{\{([[:digit:]]|[^[:digit:]])+\}\}"


4 commentaires

Si vous devez savoir, j'essaie d'extraire des parties d'un fichier XML de vidage Wikipedia contenant des données non structurées (toutes ci-dessus potentiellement contenues dans ). Je pense donc que l'analyse XML est un peu moins pertinente ici.


Wow, je l'ai fait juste (la Wikipedia Dump Thing). Vous pourriez le trouver beaucoup plus fort qu'il ne semble (au moins je l'ai fait).


De plus, je pense que l'utilisation d'un analyseur XML nécessite de charger tout le fichier à la fois et que le vidage Wiki est énorme.


@Noam pas si c'est un parseur SAX en streaming, par exemple. Nokogiri.org/nokogiri/xml/sax.html



2
votes

C'est la façon dont j'ai résolu ce problème xxx


1 commentaires

\ s et \ s sont des extensions PCRE, non disponibles dans Standard Grep.



0
votes

Cela a fonctionné pour moi:

grep -zo '[[:cntrl:][:print:]]'


0 commentaires