Suppose you have a text file containing the following:
and you wanted to use the value of strings, which is “hello world” in your script
You can parse it with the following:
grep '^strings=' test | sed 's/strings=//g'
So the generic format is:
grep '^variablename=' filename | sed 's/variablename=//g'
The grep searches for a string beginning with ‘strings=’, in the file ‘test’, and outputs the following:
$grep '^strings=' test strings=hello world
Next we have to remove the initial assignment part upto and including the ‘=’ sign, this is done by piping the output of grep, to sed.
Now the sed line substitutes the string “strings=” with an empty string. The substitution is done globally. Finally sed outputs just the value of the assigned variable.
I wanted to use the main User directory on the server, to make my backups more generic. I know that the file /etc/imscp/imscp.conf contains the following line:
USER_HOME_DIR = /var/www/virtual
So what I want is to get /var/www/virtual from this file, removing the assignment and spaces.
The solution is:
grep -i 'USER_HOME_DIR' imscp/imscp.conf | sed 's/USER_HOME_DIR[ ]=[ ]//'
without the initial spaces. A space within a square brackets matches any number of spaces in the expression.
However, if you want to use these values in variables, you need to make minor adjustments to take care of variable escaping:
apache_home_var="USER_HOME_DIR" apache_conf_file=/etc/imscp/imscp.conf grep -i "$apache_home_var" "$apache_conf_file" | sed 's/'$apache_home_var'[ ]=[ ]//'
Joel G Mathew, known in tech circles by the pseudonym Droidzone, is an opensource and programming enthusiast.
His favorite pastime is grappling with GNU compilers, discovering newer Linux secrets, writing scripts, hacking roms, and programs (nothing illegal), reading, blogging. and testing out the latest gadgets.
When away from the tech world, Dr Joel G. Mathew is a practising ENT Surgeon, busy with surgeries and clinical practise.