📖 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
Step 1: Understand the role of anchors in regex
Anchors are special characters that match positions in text, not actual characters.
Step 2: Identify the meaning of ^
The ^ anchor matches the start of a line in bash regex.
Final Answer:
It matches the start of a line. -> Option D
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
Step 1: Understand the meaning of $ anchor
The $ anchor matches the end of a line in regex.
Step 2: Match lines ending with 'done'
Using done$ matches lines where 'done' is at the end.
Final Answer:
grep 'done$' file.txt -> Option A
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
Step 1: Understand the regex ^apple$
This matches lines that start and end exactly with 'apple' and nothing else.
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.
Final Answer:
apple
apple -> Option C
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
Step 1: Analyze the position of the anchor ^
The ^ anchor must be at the start of the pattern to match line start.
Step 2: Correct the pattern placement
Use ^Error to match lines starting with 'Error'. Placing ^ after 'Error' is invalid.
Final Answer:
The anchor ^ should be at the start, not after 'Error'. -> Option B
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
Step 1: Match line start with a digit
The pattern ^[0-9] matches lines starting with any digit.
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.
Step 3: Combine pattern correctly
^[0-9].*\.$ matches lines starting with digit, any characters, ending with a period.
Final Answer:
grep '^[0-9].*\.$' data.txt -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.