Home > Mobile >  Grep variable at exact point in string
Grep variable at exact point in string

Time:11-11

I have a file with numerical data, and reading the variables from another file extract the correct string.

I have my code to read in the variables.
The problem is the variable can occur at different points within the string, i only want the string that has the variable on the right-hand side, i.e. the last 8 characters.
e.g.

grep 0335439 foobar.txt

00032394850033543984  
00043245845003354390  
00060224460033543907 
00047444423700335439 

In this case its the last line.

I have tried to write something using ${str: -8}, but then I lose the data in front.

I have found this command

grep -Eo '^.{12}(0335439)' foobar.txt

This works, however when I use my script and put a variable in the place it doesn't, grep -Eo '^.{12}($string)' foobar.txt.

I have tried without brackets but it still does not work.

CodePudding user response:

i only want the string that has the variable on the right-hand side, i.e. the last 8 characters

A non-regex approach using awk is better suited for this job:

s='00335439'
awk -v n=8 -v kw="$s" 'substr($0, length()-n, n) == kw' file

00043245845003354390

Here we passing n=8 to awk and using substr($0, length()-n, n) we are getting last n characters in a line, which is then compared against variable kw which is set to a value on command line.

  • Related