Je parse un fichier XML avec Comment puis-je utiliser grep pour obtenir tout dans "{{" et "}}" étant donné que le grep J'ai actuellement p> mais cela ne fonctionne que sur des choses qui sont sur la même ligne. P > p> . Code> Le caractère ne reconnaît pas les nouvelles lignes neuves? p>
4 Réponses :
Une option est de supprimer la nouvelle ligne, puis de GREP, comme dans: 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> grep regexp sont gourmands, vous pouvez utiliser Perl Regexp: P> cat myfile | tr -d '\n' | perl -pe 's/.*?({{.*?}})/\1\n/g' | grep {{
Il fait le chat mais maintenant le grep ne fonctionne pas - il renvoie tout le dossier. Ce qui donne?
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:]])+\}\}"
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
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
C'est la façon dont j'ai résolu ce problème
\ s code> et
\ s code> sont des extensions PCRE, non disponibles dans Standard Grep.
Cela a fonctionné pour moi:
grep -zo '[[:cntrl:][:print:]]'