'sed' newbies might find this post useful !!
Input file:
$ cat file.txt
port:9903
os-version:VERSION
codename:hardy
status:active
The content of '/etc/lsb-release' file on my ubuntu desktop:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.3 LTS"
Lets extract the 'DISTRIB_RELEASE' version from the above file:
$ awk -F '=' '/DISTRIB_RELEASE/ {print $2}' /etc/lsb-release
8.04
Required: Replace the text 'VERSION' in the input file 'file.txt' with the output of the above command (i.e. 'DISTRIB_RELEASE' version)
First way of doing this:
$ myvar=$(awk '/DISTRIB_RELEASE/ {print $2}' FS=\= /etc/lsb-release)
$ sed "s/VERSION/$myvar/g" file.txt
Output
port:9903
os-version:8.04
codename:hardy
status:active
** Important to see that we have used double quotes (instead of regular single quote) in the above sed statement. Using single quote is not going to expand the content of the variable 'myvar'.
Other ways :
$ sed "s/VERSION/`awk -F '=' '/DISTRIB_RELEASE/ {print $2}' /etc/lsb-release`/g" file.txt
Which is same as:
$ sed "s/VERSION/$(awk -F '=' '/DISTRIB_RELEASE/ {print $2}' /etc/lsb-release)/g" file.txt
And another way of quoting (This will allow you to use the single quote with sed statement):
$ sed 's/VERSION/'"$(awk -F '=' '/DISTRIB_RELEASE/ {print $2}' /etc/lsb-release)"'/g' file.txt
same as
$ sed 's/VERSION/'"`awk -F '=' '/DISTRIB_RELEASE/ {print $2}' /etc/lsb-release`"'/g' file.txt
Related post:
- Accessing external variable in awk and sed
1 comment:
Thanks for that post it saved my time.
Post a Comment