2017-01-17 4 views
0
私はこの文字の1まで、Perlの正規表現にマッチする文字列を取得したい

が表示されます。" , ' , whitespace , #のLinux grepの停止: " '#空白

これはwhitespace"

のために動作しますが
grep -Poi 'form.*?action=["\s]?\K.*?(?="\s)' file.php 

私はそれが#'のために働くことはできません。私はこれを試してみましたが、それは動作しません。私は間違って何をしているのですか?

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

おそらく意味 '(?= [" \ sの#の\は ']) ' – revo

答えて

0

シェル構文では、シングルクォート文字列内のエスケープはサポートされていません。引数のその部分の二重引用符で囲まれた文字列に切り替えます。

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

おかげで迅速な答えを。私は問題を抱えている、今、bashはエラーを表示しませんが、grepコマンドはdoesnの'これらの文字のいずれかが現れるまで、Perlの正規表現にマッチする文字列を提供します。代わりに(?= ["\ s#\ '])書くと動作します。なぜなのかご存知ですか? – v8rs

+0

セットの1つの文字にマッチさせるには、それを '[...]'にする必要があります。角かっこなしでは、文字列ではなく、文字列と一致します。 – Barmar

+0

'\ s# ''はスペースの後に '#'と続けて '' 'とマッチします。 '[\ s# ']'はスペース、 '#'または ''にマッチします。 – Barmar

関連する問題