2014-02-22 232 views
1

我在我的bash shell腳本中遇到了一個awk問題。在下面的代碼片段中,我在awk中傳遞了一個用於正則表達式的變量var_awk。這樣做是爲了得到上述正則表達式行,但下面的回聲不顯示任何數據awk傳遞變量

echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'` 

我無法章爲正則表達式,雖然當我這樣做印刷REG它打印但沒有做的正則表達式時,如預期。

if [ $GE == "HBCA" ] || [ $GE == "HBUS" ] || [ $GE == "HBEU" ]; then 
     for f in `ls -ltr $date*GEN*REVAL*log|grep -v LPD | awk '{split($9,a,"_")}{print a[3]}'`; do 
       echo $f 
       var_awk="$date"_RESET_CALC_"$f" 
       echo $var_awk 
       echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'` 
+0

一般來說,你應該使用'$(...)'表示法來代替命令周圍的反引號。 –

回答

3

你不能以這種方式在正則表達式中使用變量。你需要做的:

/usr/xpg4/bin/awk -v reg="$var_awk" '$0~reg{ print $0 }' 

或者乾脆

/usr/xpg4/bin/awk -v reg="$var_awk" '$0~reg' 
  • 裏面/ /您的變量REG將被用作文字字。
  • 引用你的shell變量。
+0

感謝您的幫助 – user3341078

3

試試這個:

...whatever you had already..|awk -v reg="$var_awk" '$0~reg' 
  • 這是更好地纏上報價,如shell變量如果你的var有空格。
  • /pattern/在awk中被稱爲正則表達式常量。它不能用於變量,這就是爲什麼它被稱爲constant。在這個例子中,我們需要使用動態正則表達式。
+0

謝謝噸傢伙。 stackoverflow岩石。我的問題已解決。很高興知道//是文字而不是變量。 – user3341078

+0

@ user3341078很高興你的問題解決了。在這裏,您可以通過點擊答案旁邊的複選標記來感謝。 –