Red_badger
Red_badger

Reputation: 149

Grep variable at exact point in string

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.


Update:

In this case the length of the string is always 20 characters, so counting from the LHS is OK in my case, but you are correct its was not the answer to the original question. I tried to comment the code so say this but pasting it into the comment box removed the formatting.

Upvotes: 0

Views: 110

Answers (1)

anubhava
anubhava

Reputation: 786359

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.

Upvotes: 3

Related Questions