Sunday, October 24, 2021

[SOLVED] How to use grep to get anything just after `name=`?

Issue

I’m stuck in trying to grep anything just after name=, include only spaces and alphanumeric.

e.g.:

name=some value here

I get

some value here

I’m totally newb in this, the following grep match everything including the name=.

grep 'name=.*' filename

Any help is much appreciated.


Solution

As detailed here, you want a positive lookbehind clause, such as:

grep -P '(?<=name=)[ A-Za-z0-9]*' filename

The -P makes grep use the Perl dialect, otherwise you'd probably need to escape the parentheses. You can also, as noted elsewhere, append the -o parameter to print out only what is matched. The part in brackets specifies that you want alphanumerics and spaces.

The advantage of using a positive lookbehind clause is that the "name=" text is not part of the match. If grep highlights matched text, it will only highlight the alphanumeric (and spaces) part. The -o parameter will also not display the "name=" part. And, if you transition this to another program like sed that might capture the text and do something with it, you won't be capturing the "name=" part, although you can also do that by using capturing parenthess.



Answered By - markets