我正在处理awk替换,但出现了问题,以下代码没有进行任何替换,只是打印输出未改变的内容。有人能看到我漏掉的部分吗?任何帮助都将不胜感激!(PS!$DOCPATH和$SITEPATH是shell变量,在我的awk设置中完全正常运行)。
awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" '{ sub( /docpath/, sitepath ) } { print }'
我正在处理awk替换,但出现了问题,以下代码没有进行任何替换,只是打印输出未改变的内容。有人能看到我漏掉的部分吗?任何帮助都将不胜感激!(PS!$DOCPATH和$SITEPATH是shell变量,在我的awk设置中完全正常运行)。
awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" '{ sub( /docpath/, sitepath ) } { print }'
说:
sub( /docpath/, sitepath )
< p > 使用 awk
命令时,它将替换模式 docpath
,而不是变量 docpath
。 < /p >
< p > 请说明: < /p >awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" '{sub(docpath, sitepath)}1' filename
我忍不住要用sed来写这段代码:
sed 's/'"$DOCPATH"'/'"$SITEPATH"'/' input
$SITEPATH
)包含换行符,则无法正常工作。 - Vassilis/docpath/
会查找字面字符串"docpath",而不是您想要的变量。只需使用sub(docpath,sitepath)
。
注意:如果同一行中可能有多个匹配项,则需要使用gsub
而不是sub
。