📖 Scenario: You are working with a text file that contains a list of fruits and vegetables. You want to find lines that match certain patterns using grep with basic regular expressions.
🎯 Goal: Learn how to use grep with basic regex patterns to search for specific words or patterns in a text file.
📋 What You'll Learn
Create a text file named items.txt with exact lines provided.
Use a variable to store the filename items.txt.
Use grep with a basic regex pattern to find lines starting with a specific letter.
Print the matching lines to the terminal.
💡 Why This Matters
🌍 Real World
Searching text files for specific patterns is common in system administration, log analysis, and data processing.
💼 Career
Knowing how to use <code>grep</code> with regex helps automate searching tasks and quickly find needed information in files.
Progress0 / 4 steps
1
Create the text file items.txt
Create a text file called items.txt with these exact lines, each on its own line: apple banana carrot apricot blueberry
Bash Scripting
Hint
Use cat with a here-document or any text editor to create items.txt with the exact lines.
2
Set a variable for the filename
Create a variable called filename and set it to the string items.txt.
Bash Scripting
Hint
Use filename="items.txt" to create the variable.
3
Use grep with basic regex to find lines starting with 'a'
Use grep with the pattern ^a on the file stored in the variable filename to find lines that start with the letter a. Write the command using the variable $filename.
Bash Scripting
Hint
The pattern ^a means lines starting with 'a'. Use grep '^a' "$filename".
4
Print the matching lines
Run the command to print the lines from items.txt that start with a. The output should be exactly: apple apricot
Bash Scripting
Hint
Just run the grep command from the previous step to see the matching lines.
Practice
(1/5)
1. What does the caret symbol ^ mean in a basic regex pattern used with grep?
easy
A. It matches the end of a line
B. It matches the start of a line
C. It matches any single character
D. It matches zero or more repetitions
Solution
Step 1: Understand caret usage in regex
The caret ^ is used to anchor the pattern to the start of a line in basic regex.
Step 2: Compare with other anchors
The dollar sign $ matches the end of a line, so caret is specifically for the start.
Final Answer:
It matches the start of a line -> Option B
Quick Check:
^ means start of line [OK]
Hint: Caret (^) always means line start in grep regex [OK]
Common Mistakes:
Confusing ^ with $ (end of line)
Thinking ^ matches any character
Using ^ to mean OR condition
2. Which of the following is the correct basic regex syntax to search for lines containing either "cat" or "dog" using grep?
easy
A. grep 'cat\|dog' file.txt
B. grep 'cat|dog' file.txt
C. grep 'cat\dog' file.txt
D. grep 'cat/dog' file.txt
Solution
Step 1: Understand OR in basic regex
In basic regex with grep, the OR operator is written as \|, not just |.
Step 2: Check each option
grep 'cat|dog' file.txt uses | without escape, which is invalid in basic regex. grep 'cat\|dog' file.txt correctly escapes it as \|. Options C and D use wrong characters.
Final Answer:
grep 'cat\|dog' file.txt -> Option A
Quick Check:
OR in basic grep regex = \| [OK]
Hint: Use \| for OR in basic grep regex [OK]
Common Mistakes:
Using | without escaping in basic grep
Confusing \| with \dog or /
Forgetting to escape special characters
3. Given a file animals.txt with these lines:
cat
caterpillar
dog
catalog
dogma
What is the output of grep '^cat$' animals.txt?
medium
A. cat
caterpillar
catalog
B. caterpillar
catalog
C. cat
D. No output
Solution
Step 1: Understand the regex pattern
The pattern ^cat$ matches lines that start and end exactly with "cat" (no extra characters).
Step 2: Check each line against pattern
Only the line "cat" matches exactly. "caterpillar" and "catalog" have extra characters, so they don't match.
Final Answer:
cat -> Option C
Quick Check:
^cat$ matches exact line 'cat' [OK]
Hint: Use ^ and $ to match exact whole line [OK]
Common Mistakes:
Assuming partial matches with ^ and $
Ignoring line boundaries in regex
Confusing grep default substring match with anchored match
4. You want to find lines containing either "apple" or "banana" in fruits.txt using basic regex with grep. Which command uses incorrect syntax for the OR operation?
medium
A. grep 'apple|banana' fruits.txt
B. grep 'apple\|banana$' fruits.txt
C. grep '^apple\|banana$' fruits.txt
D. grep 'apple\|banana' fruits.txt
Solution
Step 1: Identify correct OR syntax in basic grep
Basic regex requires escaping the OR operator as \|. Using | alone treats it as a literal | character, not as an OR operator.
Step 2: Check each option
grep 'apple|banana' fruits.txt uses | without escape, treating | as literal, not OR. Options A, B, and C correctly escape OR operator.
Final Answer:
grep 'apple|banana' fruits.txt -> Option A
Quick Check:
Unescaped | in basic grep regex = literal |, not OR [OK]
Hint: Escape | as \| in basic grep regex [OK]
Common Mistakes:
Not escaping | in basic regex
Mixing extended regex syntax without -E flag
Misplacing anchors with OR operator
5. You want to find lines in data.txt that start with "error" or end with "fail" using basic regex with grep. Which command correctly does this?
hard
A. grep '^error\|fail' data.txt
B. grep '^error|fail$' data.txt
C. grep '^error$\|fail$' data.txt
D. grep '^error\|fail$' data.txt
Solution
Step 1: Understand the pattern requirements
We want lines starting with "error" OR lines ending with "fail". So pattern is ^error OR fail$.
Step 2: Use correct OR syntax in basic regex
Basic regex OR is \|. So pattern is ^error\|fail$. grep '^error\|fail$' data.txt matches this exactly.
Step 3: Check other options
grep '^error|fail$' data.txt misses escape on OR, causing error. grep '^error$\|fail$' data.txt incorrectly anchors "error" with $. grep '^error\|fail' data.txt misses anchor on "fail".
Final Answer:
grep '^error\|fail$' data.txt -> Option D
Quick Check:
Start with ^error OR end with fail$ using \| [OK]
Hint: Combine ^ and $ with \| for OR in basic grep regex [OK]
Common Mistakes:
Not escaping | in basic regex
Misplacing anchors with OR operator
Using $ with start anchor or vice versa
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.