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

353
SaltyNuts

Gibt es eine Möglichkeit, grepalle Instanzen von Text in jedem Paar von Anführungszeichen in einer Datei zu erhalten oder auf andere Weise zu erhalten? 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 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 die Ausgabe als:

"text over here" "text over there" 

Muss die Anführungszeichen nicht enthalten.

1

2 Antworten auf die Frage

3
barlop
$ cat aaaa foo "bar" base "ere" fff "fff"ggggg"rr"  $ grep -o '"[^"]*"' aaaa "bar" "ere" "fff" "rr" 
Dieser Befehl funktioniert auch ohne "P". Scott vor 8 Jahren 1
@Scott ok .. obwohl -P im Allgemeinen sehr nützlich ist, denn ohne -P sind die regulären Ausdrücke etwas primitiv. Zum Beispiel `echo 1111 | grep -o 1 `Alles, was verlangt wird, ist, dass '1' zweimal vorkommt, aber ohne das P funktioniert das oder oder nicht. barlop vor 8 Jahren 0
1
pfnuesel

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.

Es wird mehr als einem Ereignis entsprechen, aber da Sie den Begriff "nicht gierige Version" verwenden, möchte ich Sie darauf hinweisen, dass der Stern immer noch gierig ist. Wenn Sie das wollten, was Sie nicht gierig nennen. Die Art und Weise, wie Sie es als "nicht gierig", dh faul, bezeichnen, wäre "*?" ZB ". *". Ich bezweifle, dass "[^ *] *" genannt wird nicht gierig, obwohl es vielleicht weniger gierig ist als ". *" (wenn die Terminologie tatsächlich so verwendet wird). Aber sicher so weit wie die Terminologie geht. * ist gierig und *? ist faul. barlop vor 8 Jahren 2
Ich werde dies aus mangelnder Option -P `bevorzugen (wird auf einigen Systemen nicht unterstützt), obwohl" text "natürlich nur ein Beispiel ist. Dies kann jedoch durch das Entfernen des verdammten Strings" text "behoben werden der Befehl. SaltyNuts vor 8 Jahren 1