Bird
Raised Fist0
Linux CLIscripting~20 mins

grep -r for recursive search in Linux CLI - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Recursive Grep Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
1:30remaining
What is the output of this recursive grep command?
You have a directory with two files:

file1.txt contains:
apple
banana
cherry

file2.txt contains:
banana
date
fig

What will be the output of the command grep -r banana . when run inside this directory?
A
banana
banana
B
./file1.txt:banana
./file2.txt:banana
C./file1.txt:banana
DNo output
Attempts:
2 left
💡 Hint
Remember that -r searches inside files recursively and shows filename with matching lines.
💻 Command Output
intermediate
1:30remaining
What error does this grep command produce?
What error message will this command produce?

grep -r --include='*.txt' 'apple' /nonexistentdir
Agrep: invalid option -- 'r'
BNo output, command runs silently
Cgrep: missing argument after '--include='
Dgrep: /nonexistentdir: No such file or directory
Attempts:
2 left
💡 Hint
Check what happens when grep tries to search a directory that does not exist.
📝 Syntax
advanced
2:00remaining
Which grep command correctly searches recursively only in .log files?
You want to search for the word 'error' recursively but only inside files ending with .log. Which command does this correctly?
Agrep -r error --include='*.log' .
Bgrep --include='*.log' -r error .
Cgrep -r --include='*.log' error .
Dgrep error -r --include='*.log' .
Attempts:
2 left
💡 Hint
The order of options matters for some commands; check the grep manual for option placement.
🚀 Application
advanced
2:00remaining
How to exclude a directory from recursive grep search?
You want to search recursively for 'TODO' but exclude the directory named 'vendor'. Which command achieves this?
Agrep -r --exclude-dir=vendor TODO .
Bgrep -r --exclude=vendor TODO .
Cgrep -r --exclude-dir='vendor/*' TODO .
Dgrep -r --exclude-dir vendor TODO .
Attempts:
2 left
💡 Hint
Use the option that excludes directories by name, not files.
🧠 Conceptual
expert
2:30remaining
Why does 'grep -r' sometimes show binary file matches and how to avoid it?
When running grep -r 'pattern' ., sometimes grep shows 'Binary file matches' messages instead of matching lines. Why does this happen and how can you make grep show matching lines only for text files?
ABecause grep detects binary files and by default only reports matches without content; use <code>grep -r --binary-files=text</code> to force text output.
BBecause grep cannot search recursively in binary files; use <code>grep -r --text</code> to fix recursion.
CBecause grep treats all files as binary by default; use <code>grep -r --no-binary</code> to disable binary detection.
DBecause grep only searches filenames for binary files; use <code>grep -r --files-with-matches</code> to see lines.
Attempts:
2 left
💡 Hint
Check grep's handling of binary files and the option to treat binary files as text.

Practice

(1/5)
1. What does the command grep -r 'error' /var/log do?
easy
A. Searches recursively for the word 'error' inside all files in /var/log and its subfolders.
B. Searches only the /var/log folder for files named 'error'.
C. Deletes all files containing the word 'error' in /var/log.
D. Lists all files in /var/log that have the word 'error' in their name.

Solution

  1. Step 1: Understand the grep -r option

    The -r flag tells grep to search recursively inside all files in the given directory and its subdirectories.
  2. Step 2: Analyze the command arguments

    The command searches for the text 'error' inside all files under the /var/log directory and its subfolders.
  3. Final Answer:

    Searches recursively for the word 'error' inside all files in /var/log and its subfolders. -> Option A
  4. Quick Check:

    grep -r means recursive search [OK]
Hint: Remember: -r means search inside folders and subfolders [OK]
Common Mistakes:
  • Thinking -r searches only filenames, not file contents
  • Confusing grep with delete or list commands
  • Ignoring the folder path argument
2. Which of the following is the correct syntax to recursively search for the word 'config' in the current directory?
easy
A. grep . -r config
B. grep config -r .
C. grep -r . config
D. grep -r config .

Solution

  1. Step 1: Recall grep syntax

    The correct syntax is grep [options] pattern path. The -r option comes before the pattern.
  2. Step 2: Match the correct order

    grep -r config . uses grep -r config . which means search recursively for 'config' in current directory ('.').
  3. Final Answer:

    grep -r config . -> Option D
  4. Quick Check:

    Options order: grep -r pattern path [OK]
Hint: Options come before pattern and path in grep command [OK]
Common Mistakes:
  • Placing -r after the pattern or path
  • Swapping pattern and path arguments
  • Using dot (.) in wrong position
3. Given this folder structure and files:
./docs/readme.txt (contains 'install')
./src/app.py (contains 'install')
./src/utils.py (no 'install')

What is the output of grep -r 'install' ./?
medium
A. ./docs/readme.txt:install ./src/app.py:install
B. ./docs/readme.txt:install
C. ./src/utils.py:install
D. No output

Solution

  1. Step 1: Understand recursive search

    The command searches all files under current folder (./) and subfolders for the word 'install'.
  2. Step 2: Identify matching files

    Both readme.txt and app.py contain 'install', so their lines are printed with filenames.
  3. Final Answer:

    ./docs/readme.txt:install ./src/app.py:install -> Option A
  4. Quick Check:

    grep -r finds all matching lines with filenames [OK]
Hint: grep -r shows filename:line for all matches [OK]
Common Mistakes:
  • Expecting only filenames without matching lines
  • Assuming files without the word appear in output
  • Ignoring recursive search in subfolders
4. You run grep 'TODO' /project but get an error: grep: /project: Is a directory. What is the likely cause?
medium
A. You forgot to add the -r option for recursive search.
B. You used the wrong quotes around TODO.
C. You used grep without the -r option but gave a directory path.
D. You ran grep without specifying the directory path.

Solution

  1. Step 1: Analyze the error message

    The error says grep treats /project as a file, but it is a directory.
  2. Step 2: Understand grep behavior

    Without -r, grep cannot search inside directories and errors out when given a directory path.
  3. Final Answer:

    You used grep without the -r option but gave a directory path. -> Option C
  4. Quick Check:

    grep needs -r to search directories [OK]
Hint: Use -r to avoid directory errors when searching folders [OK]
Common Mistakes:
  • Assuming quotes cause the error
  • Thinking -r was forgotten when it was used
  • Not specifying directory path at all
5. You want to find all files under /home/user/projects containing the word 'fixme' but exclude any files in node_modules subfolders. Which command achieves this?
hard
A. grep -r 'fixme' /home/user/projects | grep -v node_modules
B. grep -r --exclude-dir=node_modules 'fixme' /home/user/projects
C. grep -r --exclude='node_modules' 'fixme' /home/user/projects
D. grep -r --exclude-dir='fixme' /home/user/projects

Solution

  1. Step 1: Understand the requirement

    You want recursive search for 'fixme' but skip directories named 'node_modules'.
  2. Step 2: Use correct grep option to exclude directories

    The --exclude-dir=node_modules option tells grep to skip those folders during recursive search.
  3. Step 3: Check other options

    grep -r 'fixme' /home/user/projects | grep -v node_modules filters output but still searches inside node_modules, which is inefficient. grep -r --exclude='node_modules' 'fixme' /home/user/projects excludes files named 'node_modules' not directories. grep -r --exclude-dir='fixme' /home/user/projects excludes directories named 'fixme' which is wrong.
  4. Final Answer:

    grep -r --exclude-dir=node_modules 'fixme' /home/user/projects -> Option B
  5. Quick Check:

    Use --exclude-dir to skip folders in recursive grep [OK]
Hint: Use --exclude-dir to skip folders during recursive grep [OK]
Common Mistakes:
  • Using --exclude instead of --exclude-dir for directories
  • Filtering output instead of excluding directories
  • Wrong option names or misplaced quotes
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard