Est-ce que grep peut montrer seulement le résultat que je veux

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.