【问题标题】:Sed failing with escape characters in variablesSed 因变量中的转义字符而失败
【发布时间】:2018-04-02 14:20:00
【问题描述】:

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 中?问题是我不知道从哪里开始。我是在自欺欺人地简化它还是有办法?如果有,你可能需要帮助我,因为我发现这些东西“扭曲了我脆弱的小心灵”*

*由卡特曼提供;P

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

【问题讨论】:

  • 作为一种解决方法,我尝试了以下两行而不是最后一行 sed #sed -i "s/'$OLDLINE'/'$AMENDEDLINE'/g" $SRCDIR/$IPLOGFILE sed -i "$ d" $SRCDIR/$IPLOGFILE printf "$FORMAT" "$FIRSTDETECTED" "$TIMESTAMP" "$LASTIP" >> $SRCDIR/$IPLOGFILE
  • "删掉了部分,但可以提供其余部分" .. 请阅读Minimal,Complete,Verifiable Examples 我们希望看到产生问题的最小代码,而不是整个“战争与和平”大部头;- )。通常,当您将问题简化为基本问题时,您会自己找到解决方案。祝你好运。
  • 我一般同意你的观点,但我问的是单个 awk 是否可以替代提供 LASTIP、IF 条件的 grep、提供 FIRSTDETECTED 和 LASTDETECTED 的 grep,最后是更新最新的 sed文件中的时间戳。如果不显示上下文,我看不到“重现”问题的方法。好的,所以我可以去掉我用来调试的几个 echos/printfs。我现在将其编辑出来;)
  • 被查询的(制表符分隔的)文件包含第一次检测到 IP 的时间戳、最后一次检测到 IP 的时间和 IP 地址
  • 无论您尝试做什么,在 awk 中都是微不足道的,但请编辑您的问题以提供简洁、可测试的样本输入和预期输出(即 minimal reproducible example 的缺失部分),所以我们可以帮助你。

标签: bash awk sed grep


【解决方案1】:

你可以试试这样

sed -i 's/'"$OLDLINE"'/'"$AMENDEDLINE"'/g' "$SRCDIR"/"$IPLOGFILE"

我认为 '$OLDLINE' 和 '$AMENDEDLINE' 没有展开

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多