9

I want to search in a long sentence (more than 1024 letters).

I have one text file (test.txt) which has one long sentence, like this:

afdafglwqgkjrldjl;ewqje;'k;g;je;;;fdsgalsdkf;akslg;safdas.....dasfsd

Now I want to check which line contains the word saf. This command just shows the whole sentence:

less test.txt | grep saf

Is it possible to get a part of the sentence or should I use a command other than grep?

5
  • 1
    grep -o 'saf' text.text?
    – Cyrus
    Commented Oct 19, 2018 at 14:54
  • THanks! It shows the matched point. however is it possible to show the a few letters before and after of matches???
    – whitebear
    Commented Oct 19, 2018 at 14:56
  • 4
    grep -o '.\{0,3\}saf.\{0,3\}' text.text – this will include up to three characters before and up to three characters after. But if there is a second saf and it begins within these "three characters after" then it won't be matched separately. Commented Oct 19, 2018 at 15:48
  • @KamilMaciorowski It's perfect what I want. it works prety well
    – whitebear
    Commented Oct 23, 2018 at 21:44
  • Related: stackoverflow.com/questions/2034799/… Commented Oct 10, 2023 at 7:12

2 Answers 2

6

Not exactly what you were looking for: show the matching lines and highlight the occurences in those lines:

grep --color 'saf' test.txt

Options for searching saf and displaying up to 15 characters before and after the occurences found using:

  • the standard regex syntax, first mentioned by @kamil-maciorowski in his comment on the question:

    grep -o '.\{0,15\}saf.\{0,15\}' test.txt | grep saf --color
    
  • Perl-compatible regex syntax with the -P option, if available:

    grep -o -P '.{0,15}saf.{0,15}' test.txt | grep --color saf
    
  • extended regex syntax with the -E option, if your grep has no -P option (like e.g. on macOS):

    grep -o -E '.{0,15}saf.{0,15}' test.txt | grep --color saf
    
5
  • See my comment under the question. If you add a remark to your answer about a possibility of not matching all saf-s, I will upvote it and delete my comment. Commented Oct 19, 2018 at 15:53
  • Thanks @t0r0X , I tried your one too . my grep doens't have -P option somehow. and backslash before { is needed. But I appreciate your answer too.
    – whitebear
    Commented Oct 23, 2018 at 21:46
  • @whitebear Indeed, not every grep has -P, but there's yet another variant, I'll update again my answer.
    – t0r0X
    Commented Oct 24, 2018 at 0:33
  • @kamil-maciorowski I will look into it.
    – t0r0X
    Commented Oct 24, 2018 at 16:04
  • This is super useful for grepping on minified files. Commented Feb 9, 2021 at 20:11
0

bgrep if lines don't necessarily fit into memory

I keep coming back to this random repo from time to time: https://github.com/tmbinc/bgrep Install:

curl -L 'https://github.com/tmbinc/bgrep/raw/master/bgrep.c' | gcc -O2 -x c -o $HOME/.local/bin/bgrep -

Use:

bgrep `printf %s saf | od -t x1 -An -v | tr -d '\n '` myfile.bin

Sample output:

myfile.bin: c80000003
\x02abc
myfile.bin: c80000007
dabc

I have tested it on files that don't fit into memory, and it worked just fine.

I've given further details at: https://unix.stackexchange.com/questions/223078/best-way-to-grep-a-big-binary-file/758528#758528

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .