0
sed由于变量中的转义字符提前终止。希望awk可以做我需要的东西,但看不到!Sed在变量中使用转义字符失败
# 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的一行中?麻烦是我不知道从哪里开始。我是在简化它还是有办法吗?如果有,你可能要帮我,因为我觉得这个东西“扭曲我脆弱的小心灵” *
*卡特曼的礼貌,P
我已经剪掉了部分,但可以提供如果有帮助,脚本的其余部分?
作为一种变通方法,我试过下面两行,而不是最后的SED '#sed -i “S/'$ OLDLINE'/ '$ AMENDEDLINE'/ G” $ SRCDIR/$ IPLOGFILE' 'sed的-i “$ d” $ SRCDIR/$ IPLOGFILE' 'printf的“$ FORMAT“”$ FIRSTDETECTED“”$ TIMESTAMP“”$ LASTIP“>> $ SRCDIR/$ IPLOGFILE' – Greg
”删除了部分,但可以提供其余的“..请阅读[最小,完整,可验证示例](http://stackoverflow.com/help/mcve)我们希望看到产生问题的最小代码,而不是整个”战争与和平“ ;-)。通常,当您将问题归结为基础知识时,您可以自己找到解决方案。祝你好运。 – shellter
我的观点一般,但我问一个awk是否可以替代传递LASTIP的grep,IF条件,提供FIRSTDETECTED&LASTDETECTED的greps以及最后更新文件中最新时间戳的sed。如果不显示上下文,我无法看到“重现”问题的方法。好的,所以我可以剥去我曾经尝试调试的几个回声/打印文件。我将立即编辑这些文件;) – Greg