Bird
Raised Fist0
Bash Scriptingscripting~10 mins

Basic regex in grep in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Basic regex in grep
Start: Input text file
↓
Run grep with regex
↓
grep reads each line
↓
Check if line matches regex
↓
Print line
↓
End: Output matched lines
grep reads each line of a file, checks if it matches the regex, and prints only matching lines.
Execution Sample
Bash Scripting
grep '^a.*e$' sample.txt
This command prints lines from sample.txt that start with 'a' and end with 'e'.
Execution Table
StepLine ContentRegex Check '^a.*e$'Match ResultAction
1appleStarts with 'a' and ends with 'e'YesPrint line
2bananaDoes not start with 'a'NoSkip line
3aceStarts with 'a' and ends with 'e'YesPrint line
4angleStarts with 'a' and ends with 'e'YesPrint line
5grapeDoes not start with 'a'NoSkip line
6aleStarts with 'a' and ends with 'e'YesPrint line
7beeDoes not start with 'a'NoSkip line
💡 All lines processed, grep ends after last line.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6After 7Final
Current Linenoneapplebananaaceanglegrapealebeenone
Match ResultnoneYesNoYesYesNoYesNonone
Output Lines[][apple][apple][apple, ace][apple, ace, angle][apple, ace, angle][apple, ace, angle, ale][apple, ace, angle, ale][apple, ace, angle, ale]
Key Moments - 3 Insights
Why does grep skip lines that do not start with 'a'?
Because the regex '^a.*e$' requires the line to start with 'a'. Lines like 'banana' fail this check as shown in execution_table row 2.
What does the '.*' in the regex mean?
'.*' means any characters (zero or more) between the start 'a' and the end 'e'. This allows lines like 'apple' and 'angle' to match, as seen in rows 1 and 4.
Why does grep print lines that end with 'e' only?
The regex ends with 'e$', meaning the line must end with 'e'. Lines like 'ale' match this, but 'bee' does not start with 'a' so it is skipped (row 7).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the match result for line 3 ('ace')?
ASkipped
BNo
CYes
DError
💡 Hint
Check row 3 under 'Match Result' column in execution_table.
At which step does grep skip a line because it does not start with 'a'?
AStep 2
BStep 1
CStep 4
DStep 6
💡 Hint
Look at 'Match Result' and 'Action' columns for lines not starting with 'a' in execution_table.
If the regex changed to '^b.*e$', which line would grep print at step 7?
Aangle
Bbee
Capple
Dale
💡 Hint
Check which lines start with 'b' and end with 'e' in the original lines from variable_tracker.
Concept Snapshot
grep with regex:
- Reads file line by line
- Checks each line against regex
- Prints lines matching regex
- '^' means start of line
- '$' means end of line
- '.*' means any characters in between
Full Transcript
This visual trace shows how grep uses a basic regex to filter lines in a file. The regex '^a.*e$' means lines must start with 'a' and end with 'e'. Each line is checked in order. Lines matching the pattern are printed; others are skipped. Variables track the current line, match result, and output lines. Key moments clarify why some lines match or not. The quiz tests understanding of matching and skipping behavior.

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

  1. Step 1: Understand caret usage in regex

    The caret ^ is used to anchor the pattern to the start of a line in basic regex.
  2. Step 2: Compare with other anchors

    The dollar sign $ matches the end of a line, so caret is specifically for the start.
  3. Final Answer:

    It matches the start of a line -> Option B
  4. 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

  1. Step 1: Understand OR in basic regex

    In basic regex with grep, the OR operator is written as \|, not just |.
  2. 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.
  3. Final Answer:

    grep 'cat\|dog' file.txt -> Option A
  4. 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

  1. Step 1: Understand the regex pattern

    The pattern ^cat$ matches lines that start and end exactly with "cat" (no extra characters).
  2. Step 2: Check each line against pattern

    Only the line "cat" matches exactly. "caterpillar" and "catalog" have extra characters, so they don't match.
  3. Final Answer:

    cat -> Option C
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    grep 'apple|banana' fruits.txt -> Option A
  4. 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

  1. Step 1: Understand the pattern requirements

    We want lines starting with "error" OR lines ending with "fail". So pattern is ^error OR fail$.
  2. 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.
  3. 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".
  4. Final Answer:

    grep '^error\|fail$' data.txt -> Option D
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard