J’ai des données comme ça
tatusx2.atc?beginnum=0;8pctgRB Mwdf fgEio"text1"text4"text tatqsx3.atc?beginnum=1;8pctgRBwsaNezxio"text2 tatssx4.atc?beginnum=2;8pctgsvMALNejkio"data2 tatksx4.atc?beginnum=1;8pctgxdfALNebfio"text3 tatzsx5.atc?beginnum=3;8pwerRBMALNetior"datac
Comment obtenir uniquement des données entre? et “J’ai essayé le grep -oP ';.*?"' file
;8pctgRBMwdffgEio" ;8pctgRBwsaNezxio" ;8pctgsvMALNejkio" ;8pctgxdfALNebfio" ;8pwerRBMALNetior"
Mais ma sortie souhaitée est:
8pctgRB Mwdf fgEio 8pctgRBwsaNezxio 8pctgsvMALNejkio 8pctgxdfALNebfio 8pwerRBMALNetior
Vous devez utiliser des expressions de regex lookahead et lookbehind
grep -oP '(?<=;)\w*(?=")'
Je considère que vous jouez avec regexr pour en savoir plus sur les expressions régulières. Jetez un œil à leur feuille de calcul.
Une façon beaucoup plus lisible d’écrire l’expression dont vous avez besoin est:
grep -oP '(?<=;).*(?=")' file
et vous obtiendrez le résultat souhaité. Les expressions rationnelles PERL sont apparemment expérimentales mais certains modèles fonctionnent sans problèmes.
Les options suivantes sont utilisées:
-o --only-matching to the print only the matched parts of a matching line -P --perl-regexp
En utilisant ?=;
vous obtiendrez la chaîne commençant par ; mais en utilisant le >
vous pouvez commencer à l'index après. De même, la balise de fin de chaîne est spécifiée.
Voici une lecture supplémentaire suggérée.