I have a text file:

deiauk 1611516 afsdf 765
minkra 18415151 asdsf 4152
linkra sfsfdsfs sdfss 4555
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4
deiauk 1611516 afsdf ddfgfgd
luktol1 4545 4 9
luktol 1

and I want to match exactly deiauk. When I do this:

grep "deiauk" file.txt

I get this result:

deiauk 1611516 afsdf 765
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4

but I only need this:

deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

I know there's a -w option, but then my string has to mach whole line.

  • 4
    Have you actually tried grep -w? (That option is exactly for that purpose, and it works for me.) - Note: option -x matches the whole line. – Janis Jun 1 '15 at 21:53
  • 1
    "I want to match exactly deiauk / "I only need this: deiauk 1611516 afsdf 765" - which do you need? – alex Nov 16 '17 at 20:26

Try one of:

grep -w "deiauk" textfile

grep "\<deiauk\>" textfile
  • 6
    If you have a dash (-) at the end of the string this script will bring it as a result, which was not expected. – Evis Nov 11 '16 at 14:28
  • Correct @Evert : Words include only alpha chars, digits and underscores, so if you have abbreviations or other items hyphenated, this does not work. – ingyhere Jan 31 '17 at 21:10
  • @Cyrus I learnt the second one while using vi/vim * command on words. – shuva Feb 13 '18 at 19:35
  • It does not work for any special character it have for example org.apache.avro avro greped with org.apache.avro avro+mapred (tried with *) – Vishrant Mar 28 '19 at 1:30
  • 3
    @Evis Use grep -w "deiauk$" textfile instead. – ceremcem Dec 28 '20 at 22:41

Try this with GNU grep and mark word boundaries with \b:

grep "\bdeiauk\b" file


deiauk 1611516 afsdf 765

See: http://www.regular-expressions.info/wordboundaries.html

  • Thanks but why this is not working for me? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt – user3334375 Jun 1 '15 at 21:42
  • Try grep "\b${vard}\b" file.txt – Cyrus Jun 1 '15 at 21:45
  • 1
    still doesn't work :/ – user3334375 Jun 1 '15 at 21:50
  • You'll need read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt – Cyrus Jun 1 '15 at 21:54

If your grep supports -P (PCRE), you can do:

$ grep -P '(^|\s)\Kdeiauk(?=\s|$)' file.txt 
deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd
  • 8
    This is the only answer that works with hyphenated words. – ingyhere Jan 31 '17 at 21:11
  • Why is \K (PCRE reset start of match) needed? This proposed solution seems to work just fine without it. – arielf - Reinstate Monica Dec 23 '19 at 21:53

Depending on your real data, you could look for the word followed by a space:

grep 'deiauk ' file.txt 

If you know it has to be at the start of the line, check for it:

grep '^deiauk ' file.txt 
  • Sadly, all of the answers other than this are incorrect. – Shatu Mar 14 '17 at 22:43
  • 1
    @Shatu Thanks! So let's see how long it takes for it to "bubble up to the top"... I'm curious because I like to add answers to old questions... I think it is assumed it does, but I doubt it. It would be just nice for me, but actually useful for the readers. To make this a good example case, could I ask you to write a comment summarizing what the other answers are missing? – Volker Siegel Mar 14 '17 at 22:53
  • 1
    (1) Congratulations on reaching 10K rep. You now have the privilege to see that this answer was given before, and was deleted. (2) It’s always better to answer the question as broadly as possible, based on what is said, and not give an answer that works just for the sample data. It appears, from the example data in the question, that the columns are separated by spaces — but that’s not specified. All the other answers will also work for tab-separated columns. (3) You avoided the fatal flaw in tachomi’s (deleted) answer by adding the ^ — but all the other answers work … (Cont’d) – G-Man Says 'Reinstate Monica' Jul 30 '18 at 19:57
  • (Cont’d) …  if the string appears in a field other than the first one.  (4) Also, all the other answers work if ‘‘deiauk’’ is the last field (i.e., there’s nothing after it). – G-Man Says 'Reinstate Monica' Jul 30 '18 at 19:57
  • This answer is not only correct but also readable. And probably the most portable across platforms. – Vorac Jul 22 at 3:33

I found -x worked for me.

$ grep -inx -d skip 'favicon.ico' *
Grep Manual
-x, --line-regexp
              Select  only  those  matches  that  exactly  match the whole line.  For a regular expression pattern, this is like
              parenthesizing the pattern and then surrounding it with ^ and $.
  • For 1:1 matching the whole line which contains hyphens, -x the only option. For example grep -w "abc" <<<"abc-hac101-bb0" will match but grep -x "abc" <<<"abc-hac101-bb0" will not – Invisible999 Nov 11 '20 at 19:44
  • -1 grep -x searches for the entire line, so grep -x deiauk will not pick up the required line deiauk 1611516 afsdf 765 only grep -x 'deiauk 1611516 afsdf 765' will do that. The original question was "and I want to match exactly deiauk" which you have not done. – geedoubleya Apr 28 at 12:21

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