0

If we use the grep command with '\<string\>' the result will be absolute. For example:

File1:

test
test2
1test

If we use cat File1 | grep test the output will be:

test 
test2 
1test

But if we want to get only first row we must grep '\<test\>'.

Here it is the question: How can use these chars with a variable in script? Example:

cat file1 | grep '/<$1/>'

But this command does not work.

1

Single quotes do not allow variable expansion. Thus, '$1' will be a literal $1. Instead, you want double quotes. See this wiki entry about quotes for more.

$ foo=test
$ grep "\<$foo\>" file1
test

Note that <\ and \> can also be replaced with word boundaries:

$ grep "\b$foo\b" file1
test    

You also don't need to cat a file to grep – it can read a file on its own.

1

You are looking for -w to match words:

$ grep -w 'test' File1
test

In case you have the info in a variable, just use it normally with double quotes as slhck already explained:

$ var="test"
$ grep -w "$var" File1
test

From man grep:

-w
--word-regexp

Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore. This option has no effect if -x is also specified.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.