Wählen Sie alle Instanzen von zitiertem Text aus einer Datei aus

1

Gibt es eine Möglichkeit, grepalle Textinstanzen in jedem Anführungszeichenpaar in einer Datei auf andere Weise abzurufen? Ich habe Antworten wie diese gesehen: https://stackoverflow.com/questions/15435056/grep-string-inside-double-quotes, aber sie funktionieren nicht in Fällen, in denen jede Zeile eine beliebige Anzahl von Strings in Anführungszeichen enthalten kann.

Also für eine Eingabe wie diese:

Here was some "text over here", and then there was "text over there".

Ich möchte, dass die Ausgabe wie folgt lautet:

"text over here"
"text over there"

Muss nicht die Anführungszeichen selbst enthalten.

Salzige Nüsse
quelle

Antworten:

3
$ cat aaaa
foo "bar" base "ere" fff
"fff"ggggg"rr"

$ grep -o '"[^"]*"' aaaa
"bar"
"ere"
"fff"
"rr"
barlop
quelle
1
Dieser Befehl funktioniert einwandfrei ohne die P.
Scott
@Scott ok .. obwohl -P im Allgemeinen sehr nützlich ist, da die regulären Ausdrücke ohne -P ein bisschen primitiv sind. Beispielsweise wird echo 1111 | grep -o 1{2} nur verlangt , dass '1' zweimal vorkommt, aber ohne das P das {1} oder {2} oder {2,3} funktionieren nicht.
Barlop
1

Versuchen:

grep -o '"[^"]*"' /path/to/file

Hinweis: [^"]*Ist die nicht gierige Version des Platzhalters ( .*), sodass Sie mehr als ein Vorkommen pro Zeile zuordnen können.

pfnuesel
quelle
2
Es wird mit mehr als einem Vorkommen übereinstimmen, aber da Sie den Begriff "nicht gierige Version" verwenden, möchte ich Sie darauf hinweisen, dass der Stern immer noch gierig ist. Wenn Sie wollten , was Sie nicht gierig nennen .. Die Art und Weise Sie es machen , was man „nicht gierig“ , also faul nennen, wäre *?zB .*?bezweifle ich , dass [^*]*wäre nicht gierig genannt werden, wenn auch vielleicht könnte man sagen, auf weniger gierig als ".*"(wenn Die Terminologie wird in der Tat so verwendet. Aber sicher, was die Terminologie angeht. * ist gierig und *? ist faul.
Barlop
1
Ich werde es egoistisch bevorzugen, da die fehlende -POption (die auf einigen Systemen nicht unterstützt wird) natürlich textnur ein Beispiel war, aber das kann behoben werden, indem einfach die verdammte Zeichenfolge textaus dem Befehl entfernt wird.
SaltyNuts