Wie extrahiere ich alle Strings in Requisite ('')?

598
FaiChou

Meine Quelldateien sind ungefähr so:

abl require('../img/a.png') require('../img/b.png') bla require('../../img/c.png') ble <Image source= 

Meine erwartete Ausgabe ist:

'../img/a.png' '../img/b.png' '../../img/c.png' '../img/d.png' 

In einem Bash-Skript muss ich alle erforderlichen '../../img/bla.png'Zeilen für jede Zeile einer Datei extrahieren . Kann eine Zeile für mehrere Elemente sein.

Ich habe versucht, dies zu verwenden:

cat file | cut -d'(' -f2 | cut -d')' -f1 

Aber das kann ich nur für eine Saite für eine Zeile schneiden.

1

1 Antwort auf die Frage

1
Kamil Maciorowski
grep -Po '(?<=require\().*?(?=\))' 

Es verwendet Look-Behind und Look-Ahead. Es wird fehlschlagen, wenn ein Pfad enthält ). Wenn jeder Pfad in Anführungszeichen steht, sollte diese Version auch mit )Pfaden funktionieren :

grep -Po "(?<=require\()'.*?'(?=\))" 

Dies wurde unter Linux, GNU grep, getestet. Mac-Benutzer, siehe diese Frage .

Schöne Lösung mit grep und PCRE! Ich habe versucht, mit sed zu filtern, dann wurde mir klar, dass die Aufteilung in Felder mit awk (awk -F '[())' ';} '` Paulo vor 6 Jahren 0
Gut gemacht. [Grep -P funktioniert nicht gut] (https://stackoverflow.com/questions/16658333/grep-p-no-longer-works-how-can-i-rewrite-my-searches), also verwende ich `perl - nle 'print $ & if m ' file` erledigt diesen Job FaiChou vor 6 Jahren 0
@FaiChou Vielen Dank für Ihr Feedback. Ich habe den Link in meine Antwort aufgenommen. Kamil Maciorowski vor 6 Jahren 0