【问题标题】:awk substitute shell variablesawk 替换 shell 变量
【发布时间】:2014-01-04 22:41:11
【问题描述】:

我正在为 awk 替换而苦苦挣扎,由于某种原因,以下代码没有替换任何东西,它只是打印输出不变。谁能看到我在这里想念的东西?任何帮助都会非常感激! (PS!$DOCPATH 和 $SITEPATH 是 shell 变量,它们在我的 awk 设置中工作得很好)。

awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" '{ sub( /docpath/, sitepath ) } { print }'

【问题讨论】:

    标签: bash variables awk substitution


    【解决方案1】:

    说:

    sub( /docpath/, sitepath )
    

    导致awk 替换模式docpath,而不是变量docpath

    你需要说:

    awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" '{sub(docpath, sitepath)}1' filename
    

    【讨论】:

    • 这种方式完全错误,应该参考perreal提供的sed命令。
    • 是的,我的实际脚本要复杂一些。我还需要粘贴后缀和前缀的东西。 awk 因此效果很好,但如果我的问题仅与这个问题有关,我可能会选择 sed 解决方案。感谢您提供有用的反馈:)
    【解决方案2】:

    没办法用 sed 写这个:

    sed 's/'"$DOCPATH"'/'"$SITEPATH"'/' input
    

    【讨论】:

    • 由于原来的 awk 命令使用了 sub(),所以不应该在 sed 中添加 g 选项。
    • 一般来说,如果变量 ($SITEPATH) 包含换行符,这将不起作用。
    【解决方案3】:

    /docpath/ 将搜索文字字符串“docpath”,而不是您想要的变量。只需使用sub(docpath, sitepath)

    注意如果同一行中可能有多个匹配项,您将需要gsub 而不是sub

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 2016-03-19
      • 2020-02-24
      • 2015-03-10
      • 2016-10-06
      • 2023-01-11
      • 1970-01-01
      相关资源
      最近更新 更多