2014-02-22 189 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很高兴你的问题解决了。在这里,您可以通过点击答案旁边的复选标记来感谢。 –