2012-07-04 88 views
1

剛纔我正在尋找一個正則表達式,它將檢測不是用雙引號括起來的字符串。我得到了在javascript工作的神話般的答案。我實際上試圖運行它使用grep,但它不工作。誰能幫我爲什麼這個正則表達式是不工作正則表達式不能用於grep

樣品字符串:"quick" "brown" fox jumps "over" "the" lazy dog

我試圖運行:echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'

它不會有任何輸出。 Linux正則表達式與普通正則表達式有何不同。如何才能做到這一點? 請幫忙。請參考以下鏈接:http://regexr.com?31eg3爲同一

回答

1

兩件事情,首先你需要引用整個字符串呼應,或殼去掉雙引號。然後你使用Perl風格的正則表達式,所以你需要告訴grep使用它們來匹配-P選項。

$ echo "quick" "brown" fox jumps "over" "the" lazy dog 
quick brown fox jumps over the lazy dog 
$ echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])' 
$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -e '(?<![\S"])([^"\s]+)(?![\S"])' 
$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o -e '(?<![\S"])([^"\s]+)(?![\S"])' 
fox 
jumps 
lazy 
dog 

這裏我加了-o,所以很清楚是什麼匹配。

0

第一校正,附上您的字符串爲單引號:

echo '"quick" "brown" fox jumps "over" "the" lazy dog' 

[email protected]:~$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' 
"quick" "brown" fox jumps "over" "the" lazy dog 

再使用, 使用-P選項PERL兼容的正則表達式。

echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o '(?<![\S"])([^"\s]+)(?![\S"])' 
fox 
jumps 
lazy 
dog 

感謝@lynxlynxlynx爲-o小費,否則它只是顯示整個字符串匹配與其他顏色突出顯示。

1

看的echo輸出:

$ echo "quick" "brown" fox jumps "over" "the" lazy dog 
quick brown fox jumps over the lazy dog 

試試這個:

$ echo '"quick" "brown" fox jumps "over" "the" lazy dog'