2016-05-25 34 views
1

Also ich versuche, ein Grep zu schreiben, das die .epl-Dateinamen oder Dateipfade in einer bestimmten Datei findet.grep für einfaches Anführungszeichen und doppelte Anführungszeichen in einer Zeichenfolge

Ich habe die follwoing regexs versucht

Teil 1: REGEX Gebrauchte grep -rEco "\/(.+)\.epl|(.+)\.epl" ./index.epl Ergebnis erhalten

url => 'xyz.epl 
    url => 'xyz.epl 
    url => 'xyz.epl 
    url => "packet/xyz.epl 
    url => "/web/abc/xyz.epl 
    url => qq{/web/abc/xyz.epl 
    url => '/web/abc/def/xyz.epl 
    url => '/web/abc/def/xyz.epl 
    url => 'xyz.epl 
    url => 'xyz.epl 
    $url = "/web/abc/def/xyz.epl 
    var requestURL = "xyz.epl 
    var requestURL = "xyz.epl 
    <a style="float:left;" href="xyz.epl 
    [- Execute('components/xyz.epl 
    Welcome, <a href="xyz.epl 
    [- Execute('components/xyz.epl 
    <a href="xyz.epl 
    [- Execute(`'components/xyz.epl` 

Jedoch habe ich es übereinstimmen soll nur die folgenden (mit oder ohne die vorhergehenden Anführungszeichen)

'xyz.epl(OR xyz.epl) 
    'xyz.epl 
    'xyz.epl 
    "packet/xyz.epl(OR packet/xyz.epl) 
    "/web/abc/xyz.epl(OR "/web/abc/xyz.epl) 
    /web/abc/xyz.epl 
    '/web/abc/def/xyz.epl 
    '/web/abc/def/xyz.epl 
    'xyz.epl 
    'xyz.epl 
    "/web/abc/def/xyz.epl 
    "xyz.epl 
    "xyz.epl 
    "xyz.epl 
    'components/xyz.epl 
    "xyz.epl 
    'components/xyz.epl 
    "xyz.epl 
    'components/xyz.epl 

Um die gewünschte aus zu bekommen habe ich versucht grep -rEoc '\/(.+)\.epl|[\"\'](.+)\.epl' Aber es gibt mir ein unmatched '. Fehler

entfernte ich die Zitate die Regex umgibt, und ich habe mir helfen Badly placed()'s.

Sie bitte die korrekte gewünschte Ausgabe zu erreichen.

+0

Können Sie Probe Ihrer ursprünglichen Eingangsdaten zeigen? – anubhava

+0

wenn Sie Option -o als Argument nicht wahr '-o --only Anpassungs Drucken nur die angepassten (nicht leer) Teile passenden Linien, wobei jede dieser Teil auf einen separaten Ausgang line.' Nein, es tut mir leid, ich kann nicht aufgrund von Vertraulichkeitsbeschränkungen. Ich denke, dass die bereitgestellten Informationen ausreichend sind – AnyaK

Antwort

1

ich die Antwort auf meine Frage trhough zwei getrennten Quellen gefunden. Eins wird here erklärt. Der andere war

set quote='"'; grep -E "\/(.+)\.epl|['${quote}](.+)\.epl" /index.epl 

Das Set Zitat hat der Trick

0

Wie wäre es zu sagen, welche Zeichen als Teil der Dateinamen akzeptiert:

grep -Eo "[0-9a-zA-Z/]*.epl" ./index.epl 
+0

Das 'E' Flag ist in diesem Fall unnötig (obwohl es nicht schadet). Ein etwas sicherer Weg wäre "grep" [0-9a-zA-z /] * [.] Epl 'index.epl', um sicherzustellen, dass tatsächlich ein Zeitraum vor epl liegt. Wenn jedoch das Muster * irgendein * gültiger Dateiname sein könnte, würde dies nicht funktionieren, da fast jedes Zeichen Teil eines Dateinamens sein kann. – user1934428

Verwandte Themen