Bird
Raised Fist0
Bash Scriptingscripting~15 mins

Anchors (^, $) in Bash Scripting - Mini Project: Build & Apply

Choose your learning style10 modes available
Using Anchors (^, $) in Bash Scripting
📖 Scenario: You work in a small company where you need to filter log entries. The logs contain many lines, but you want to find only those lines that start or end with specific words.
🎯 Goal: You will write a bash script that uses anchors ^ and $ in regular expressions to find lines starting with a word and lines ending with a word from a list of log entries.
📋 What You'll Learn
Create a variable with multiple log lines
Create a variable with a word to match at the start of lines
Use grep with the anchor ^ to find lines starting with the word
Use grep with the anchor $ to find lines ending with the word
Print the filtered results
💡 Why This Matters
🌍 Real World
Filtering logs or text files to find lines that start or end with specific words is common in system administration and data processing.
💼 Career
Understanding anchors in regular expressions helps automate text filtering tasks, which is valuable for roles in DevOps, system administration, and scripting.
Progress0 / 4 steps
1
Create a variable with log lines
Create a variable called logs that contains these exact lines separated by newlines: error: file not found, warning: low disk space, info: update completed, error: access denied, info: user logged in
Bash Scripting
Hint

Use double quotes and \n to separate lines inside the string.

2
Create a variable with the start word to match
Create a variable called start_word and set it to the exact string error
Bash Scripting
Hint

Use double quotes to assign the string.

3
Use grep with ^ anchor to find lines starting with the word
Use echo and grep with the pattern ^$start_word to filter lines from logs that start with the word stored in start_word. Save the result in a variable called start_matches
Bash Scripting
Hint

Use double quotes around the pattern and variable to expand it correctly.

4
Use grep with $ anchor to find lines ending with a word and print results
Create a variable called end_word and set it to completed. Then use echo and grep with the pattern $end_word$ to find lines in logs that end with end_word. Save the result in end_matches. Finally, print start_matches and end_matches with echo.
Bash Scripting
Hint

Remember to use double quotes and variable expansion in the grep pattern. Use echo to print the results.

Practice

(1/5)
1. What does the anchor ^ represent in a bash regular expression?
easy
A. It matches the end of a line.
B. It matches any digit.
C. It matches any whitespace character.
D. It matches the start of a line.

Solution

  1. Step 1: Understand the role of anchors in regex

    Anchors are special characters that match positions in text, not actual characters.
  2. Step 2: Identify the meaning of ^

    The ^ anchor matches the start of a line in bash regex.
  3. Final Answer:

    It matches the start of a line. -> Option D
  4. Quick Check:

    ^ means start of line [OK]
Hint: Remember ^ means start, $ means end of line [OK]
Common Mistakes:
  • Confusing ^ with end of line anchor
  • Thinking ^ matches a character instead of position
  • Mixing ^ with other regex symbols like * or .
2. Which of the following grep commands correctly finds lines that end with the word done?
easy
A. grep 'done$' file.txt
B. grep '^done' file.txt
C. grep 'done^' file.txt
D. grep '^done$' file.txt

Solution

  1. Step 1: Understand the meaning of $ anchor

    The $ anchor matches the end of a line in regex.
  2. Step 2: Match lines ending with 'done'

    Using done$ matches lines where 'done' is at the end.
  3. Final Answer:

    grep 'done$' file.txt -> Option A
  4. Quick Check:

    Use $ to match line end [OK]
Hint: Use $ after text to match line endings [OK]
Common Mistakes:
  • Using ^ after text instead of $
  • Using ^done to match line end
  • Confusing ^ and $ anchors
3. What will be the output of this command if file.txt contains the lines:
apple
banana
apple pie
pineapple
apple

grep '^apple$' file.txt
medium
A. apple apple pie apple
B. apple pie pineapple
C. apple apple
D. banana

Solution

  1. Step 1: Understand the regex ^apple$

    This matches lines that start and end exactly with 'apple' and nothing else.
  2. Step 2: Check each line in file.txt

    Lines 'apple' and 'apple' match exactly. 'apple pie' and 'pineapple' do not match because of extra text.
  3. Final Answer:

    apple apple -> Option C
  4. Quick Check:

    ^ and $ match exact whole line [OK]
Hint: Use ^ and $ together to match whole exact lines [OK]
Common Mistakes:
  • Assuming partial matches with anchors
  • Ignoring that $ matches end of line
  • Confusing lines with extra words as matches
4. You wrote this command to find lines starting with 'Error' in a log file:
grep 'Error^' logfile.txt
But it returns no results. What is the problem?
medium
A. The file does not contain 'Error'.
B. The anchor ^ should be at the start, not after 'Error'.
C. grep does not support anchors like ^.
D. The command needs double quotes instead of single quotes.

Solution

  1. Step 1: Analyze the position of the anchor ^

    The ^ anchor must be at the start of the pattern to match line start.
  2. Step 2: Correct the pattern placement

    Use ^Error to match lines starting with 'Error'. Placing ^ after 'Error' is invalid.
  3. Final Answer:

    The anchor ^ should be at the start, not after 'Error'. -> Option B
  4. Quick Check:

    ^ must be at pattern start [OK]
Hint: Place ^ only at pattern start to match line start [OK]
Common Mistakes:
  • Putting ^ after text instead of before
  • Assuming grep ignores anchors
  • Using wrong quotes causing shell issues
5. You want to extract lines from data.txt that start with a digit and end with a period. Which grep pattern correctly uses anchors to do this?
hard
A. grep '^[0-9].*\.$' data.txt
B. grep '^[0-9].*$' data.txt
C. grep '^\d.*\.$' data.txt
D. grep '^[0-9].*.$' data.txt

Solution

  1. Step 1: Match line start with a digit

    The pattern ^[0-9] matches lines starting with any digit.
  2. Step 2: Match line end with a literal period

    Use \.$ to match a literal '.' at the end. The dot must be escaped to avoid matching any character.
  3. Step 3: Combine pattern correctly

    ^[0-9].*\.$ matches lines starting with digit, any characters, ending with a period.
  4. Final Answer:

    grep '^[0-9].*\.$' data.txt -> Option A
  5. Quick Check:

    ^ start, $ end, escape . for literal dot [OK]
Hint: Escape dot to match literal period at line end [OK]
Common Mistakes:
  • Not escaping dot, matching any char instead of period
  • Using \d which grep may not support by default
  • Missing $ anchor at line end
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