質問

I am struggling with awk substitution, for some reason the following code does not substitute anything, it just prints the output unaltered. Can anyone see what I am missing here? Any help would be very much appreachiated! (PS! The $DOCPATH and $SITEPATH are shell variables, they work perfectly fine in my awk setup).

awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" '{ sub( /docpath/, sitepath ) } { print }'
役に立ちましたか?

解決

Saying:

sub( /docpath/, sitepath )

causes awk to replace the pattern docpath, not the variable docpath.

You need to say:

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

他のヒント

Couldn't help to write this in sed:

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

/docpath/ will search for the literal string "docpath", not the variable as you want. Just use sub(docpath, sitepath).

N.b. if there could be multiple matches in the same line, you'll want gsub instead of sub.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top