I've got a file that I need to get a piece of text from using regex. We'll call the file x.txt
. What I would like to do is open x.txt
, extract the regex match from the file and set that into a parameter. Can anyone give me some pointers on this?
EDIT
So in x.txt
I have the following line
$variable = '1.2.3';
I need to extract the 1.2.3
from the file into my bash script to then use for a zip file
You can use the grep-chop-chop technique
var="$(grep -F -m 1 '$variable =' file)"; var="${var#*\'}"; var="${var%\'*}"
Use sed
to do it efficiently† in a single pass:
var=$(sed -ne "s/\\\$variable *= *['\"]\([^'\"]*\)['\"] *;.*/\1/p" file)
The above works whether your value is enclosed in single or double quotes.
Also see Can GNU Grep output a selected group?.
$ cat dummy.txt
$bla = '1234';
$variable = '1.2.3';
blabla
$variable="hello!"; #comment
$ sed -ne "s/\\\$variable *= *['\"]\([^'\"]*\)['\"] *;.*/\1/p" dummy.txt
1.2.3
hello!
$ var=$(sed -ne "s/^\\\$variable *= *'\([^']*\)' *;.*/\1/p" dummy.txt)
$ echo $var
1.2.3 hello!
† or at least as efficiently as sed
can churn through data when compared to grep
on your platform of choice. :)
If all the file lines have that format ($<something> = '<value>'
), the you can use cut
like this:
value=$(cut -d"'" -f2 file)