2017-01-17 2 views
0

Ich möchte einen String erhalten, bis eine dieser Zeichen ein Perl-Regex übereinstimmt erscheinen: " , ' , whitespace , #Linux grep Anschlag am ersten Spiel jeder dieser Zeichen: " '# Leerzeichen

Das funktioniert zwar für whitespace und "

grep -Poi 'form.*?action=["\s]?\K.*?(?="\s)' file.php 

ich kann es nicht für # und ' arbeiten. ich habe dies versucht, aber es funktioniert nicht. Was mache ich falsch?

grep -Poi 'form.*?action=["\s]?\K.*?(?="\s#\')' file.php 
+1

Sie wahrscheinlich 'gemeint (? = [" \ S # \ ']) ' – revo

Antwort

0

Shell-Syntax unterstützt nicht das Entweichen von Strings in einfachen Anführungszeichen. Wechseln Sie zu einer Zeichenfolge mit doppelten Anführungszeichen für diesen Teil des Arguments.

grep -Poi 'form.*?action=["\s]?\K.*?(?="\s#'"')" file.php 
+0

Danke für die schnelle Antwort. Ich habe ein Problem, jetzt die Bash keinen Fehler zeigen, aber der Befehl grep doesn' t stellen Sie mir die Zeichenkette zur Verfügung, die der Perl Regex entspricht, bis eines dieser Zeichen erscheint, wenn ich schreibe (? = ["\ s # \ ']), funktioniert es. Weißt du, warum? – v8rs

+0

Wenn Sie ein einzelnes Zeichen, das zu einem Set gehört, abgleichen möchten, müssen Sie es in '[...]' einfügen. Ohne die Klammern entspricht es einer Zeichenfolge, nicht einem Satz. – Barmar

+0

'\ s # '' entspricht einem Leerzeichen gefolgt von '#' gefolgt von '' '. '[\ s # ']' 'entspricht einem Leerzeichen,' # 'oder' ''. – Barmar

Verwandte Themen