Sed在变量中使用转义字符失败

时间:2017-10-21 16:42:50

标签: bash awk sed grep

由于变量中的转义字符,因此sed提前终止。希望awk可以做我需要的但却看不到的方法!

# Main section ==========================================╕
LASTIP=`grep -E '[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}\.[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}\.[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}\.[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}' $SRCDIR/$IPLOGFILE | tail -1|awk -F'\t' '{print$3}'`
if [ "$CURRENTIP" == "$LASTIP" ]; then
# Still using old IP===================================╕
  FIRSTDETECTED=`grep $LASTIP $SRCDIR/$IPLOGFILE | tail -1|awk -F'\t' '{print$1}'`
  LASTDETECTED=`grep $LASTIP $SRCDIR/$IPLOGFILE | tail -1|awk -F'\t' '{print$2}'`
  OLDLINE=$(printf "$FORMAT" "$FIRSTDETECTED" "$LASTDETECTED" "$LASTIP")
  AMENDEDLINE=$(printf "$FORMAT" "$FIRSTDETECTED" "$TIMESTAMP" "$LASTIP")
  sed -i "s/'$OLDLINE'/'$AMENDEDLINE'/g" $SRCDIR/$IPLOGFILE

除了最后一个sed之外,这个工作正常,因为$OLDLINE和/或$AMENDEDLINE包含转义字符而终止。我认为我可以直接替换awk来解决这个问题,但我想的越多,我就越认为整个部分可以用awk更有效地完成 - 也许在一行awk中?麻烦的是我不知道从哪里开始。我是在欺骗自己简化它还是有办法?如果有,你可能不得不帮助我,因为我发现这些东西“扭曲了我脆弱的小脑袋”*

*由Cartman提供; P

我已经删除了该部分但是如果有帮助可以提供其余的脚本吗?

1 个答案:

答案 0 :(得分:0)

你也许可以尝试那样

        $products = Product::all()->where('id',1);
        $myItems= $products->items()->get();
        return view('products',compact('myItems','products'));   

我认为'$ OLDLINE'和'$ AMENDEDLINE'未展开