Question

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 }'
Was it helpful?

Solution

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

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top