$ echo "unix scripting"
unix scripting
In SED:
This is a general substitution. I am trying to replace "unix" with "BASH", so "unix scripting" will become "BASH scripting"
$ echo "unix scripting" | sed 's/unix/BASH/'
BASH scripting
Suppose, the text "BASH" is assigned to a variable called "var", now if I try to replace "unix" with "$var" in sed single quote notation, its not going to work as SED can't expand external variable in single quotes.
$ var="BASH"; echo "unix scripting" | sed 's/unix/$var/'
$var scripting
Try the same above with double quotes, this will work.
$ var="BASH"; echo "unix scripting" | sed "s/unix/$var/"
BASH scripting
In AWK
General substitution of "unix" with "BASH", will work. "unix scripting" will become "BASH scripting"
$ echo "unix scripting" | awk '{gsub(/unix/,"BASH")}; 1'
BASH scripting
"BASH" is assigned in variable "var". So the following substitution is not going to work.
$ var="BASH"; echo "unix scripting" | awk '{gsub(/unix/,"$var")}; 1'
$var scripting
Method1: See the "'" (double quote-single quote-double quote) before and after the variable var.
$ var="BASH"; echo "unix scripting" | awk '{gsub(/unix/,"'"$var"'")}; 1'
BASH scripting
Method2: Use awk -v flag this way.
$ var="BASH"; echo "unix scripting" | awk -v v="$var" '{sub(/unix/,v)}1'
BASH scripting
Dedicated to all BASH newbies and Linux one liner lovers. Useful AWK,SED,BASH one liners.
Sunday, March 16, 2008
Accessing external variable in AWK and SED
Subscribe to:
Post Comments (Atom)
© Jadu Saikia http://unstableme.blogspot.com

2 comments:
That example for AWK was very useful! Googled a bit and found your piece of code. Thanks a lot!! It solved a harrasing problem.... :-)
Thanks for your In SED explanation. I was just what I was looking for.
Post a Comment