awk 替换 shell 变量
Posted
技术标签:
【中文标题】awk 替换 shell 变量【英文标题】:awk substitute shell variables 【发布时间】:2014-01-04 22:41:11 【问题描述】:我正在为 awk 替换而苦苦挣扎,由于某种原因,以下代码没有替换任何东西,它只是打印输出不变。谁能看到我在这里想念的东西?任何帮助都会非常感激! (PS!$DOCPATH 和 $SITEPATH 是 shell 变量,它们在我的 awk 设置中工作得很好)。
awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" ' sub( /docpath/, sitepath ) print '
【问题讨论】:
【参考方案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
。
【讨论】:
以上是关于awk 替换 shell 变量的主要内容,如果未能解决你的问题,请参考以下文章