2012-10-19 77 views
0

裏面用grep我試圖到grep使用bash腳本一些文本內的整數:傳遞變量來回顧後組

#!/bin/bash 
var=string2  
cat file.txt | grep -oP '(?<=string1)(\d.*)(<=$var)' 

但腳本輸出什麼。
如果我把「string2」而不是「$ var」我得到了預期的結果。
我想我應該以某種方式逃避變量,但我不知道如何。
我試過雙引號,花括號,逃脫雙引號,但沒有任何作品。
我還搜索了stackoverflow man grep和google。
那麼有什麼正確的方法來做到這一點?
感謝

+0

你試過\ $?其實,現在我說 - 爲什麼你想逃避它,如果你的意圖是它的作用與把string2放在那裏一樣?嘗試用雙引號替換單引號,$ var將變成string2。 –

回答

2

變量只在雙引號內部擴展,而不是單引號。所以它應該是:

cat file.txt | grep -oP "(?<=string1)(\d.*)(<=$var)" 
1

錯誤報價:

$ echo '(?<=string1)(\d.*)(<=$var)' 
(?<=string1)(\d.*)(<=$var) 

同時:

$ echo "(?<=string1)(\d.*)(<=$var)" 
(?<=string1)(\d.*)(<=string2) 

echo顯示了grep會看到的。