我在bash shell脚本中遇到awk问题。在下面的代码片段中,我在awk中传递一个变量var_awk用于正则表达式。我们的想法是将行放在正则表达式之上,但下面的echo不显示任何数据
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将用作文字。 答案 1 :(得分:3)
试试这个:
...whatever you had already..|awk -v reg="$var_awk" '$0~reg'
/pattern/
称为正则表达式常量。它不能与变量一起使用,这就是它被称为constant
的原因。我们需要在此示例中使用动态正则表达式。