Bird
Raised Fist0
Bash Scriptingscripting~20 mins

sed for substitution in scripts in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Sed Substitution Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this sed substitution command?
Given a file colors.txt containing:
red
blue
green
blue
What will be the output of this command?
sed 's/blue/yellow/' colors.txt
A
red
yellow
green
yellow
B
red
blue
green
blue
C
red
yellow
green
blue
D
red
yellow
yellow
yellow
Attempts:
2 left
💡 Hint
Remember, sed by default replaces only the first match per line.
💻 Command Output
intermediate
2:00remaining
What does this sed command output?
Given a file data.txt with content:
apple apple apple
banana apple
apple banana
What is the output of:
sed 's/apple/orange/g' data.txt
A
orange orange orange
banana orange
orange banana
B
orange apple apple
banana apple
apple banana
C
orange orange orange
banana apple
apple banana
D
apple apple apple
banana apple
apple banana
Attempts:
2 left
💡 Hint
The 'g' flag replaces all occurrences on each line.
🔧 Debug
advanced
2:00remaining
Why does this sed substitution fail to replace text?
Consider this command:
echo 'hello world' | sed 's/Hello/Hi/'

Why does it output hello world unchanged?
AThe command is missing the -i flag for in-place editing
Bsed is case-sensitive and 'Hello' does not match 'hello'
CThe pipe symbol '|' is used incorrectly
DThe substitution syntax is invalid
Attempts:
2 left
💡 Hint
Check the letter case in the pattern and input.
🚀 Application
advanced
2:00remaining
How to replace only the second occurrence of a word in each line using sed?
You want to replace only the second occurrence of 'cat' with 'dog' in each line of a file. Which sed command achieves this?
Ased 's/cat/dog/1' filename
Bsed 's/cat/dog/g2' filename
Csed 's/cat/dog/2' filename
Dsed 's/cat/dog/3' filename
Attempts:
2 left
💡 Hint
sed supports a number after the substitution to specify which occurrence to replace.
🧠 Conceptual
expert
3:00remaining
What is the output of this complex sed script?
Given a file file.txt with content:
one two three two one
four two five two four
What is the output of:
sed -E 's/(two)/[\1]/2g' file.txt
A
one [two] three [two] one
four [two] five [two] four
B
one two three [two] one
four [two] five [two] four
C
one two three two one
four two five two four
D
one two three [two] one
four two five [two] four
Attempts:
2 left
💡 Hint
The '2g' after the substitution means replace the second and subsequent occurrences per line.

Practice

(1/5)
1. What does the sed command sed 's/cat/dog/' file.txt do?
easy
A. Prints lines containing 'cat' from file.txt
B. Replaces all occurrences of 'cat' with 'dog' in the entire file.txt
C. Replaces the first occurrence of 'cat' with 'dog' on each line of file.txt
D. Deletes all lines containing 'cat' from file.txt

Solution

  1. Step 1: Understand the sed substitution syntax

    The command sed 's/cat/dog/' file.txt uses s/old/new/ which replaces only the first match per line.
  2. Step 2: Apply to the file content

    Each line in file.txt will have its first 'cat' replaced by 'dog', other occurrences remain unchanged.
  3. Final Answer:

    Replaces the first occurrence of 'cat' with 'dog' on each line of file.txt -> Option C
  4. Quick Check:

    sed s/old/new/ replaces first match per line [OK]
Hint: Remember: no 'g' means only first match replaced per line [OK]
Common Mistakes:
  • Thinking it replaces all matches without 'g'
  • Confusing substitution with deletion
  • Assuming it prints only matching lines
2. Which of the following is the correct syntax to replace all occurrences of 'apple' with 'orange' in a file using sed?
easy
A. sed 's/apple/orange/' file.txt
B. sed 'replace apple with orange' file.txt
C. sed 's/apple/orange//g' file.txt
D. sed 's/apple/orange/g' file.txt

Solution

  1. Step 1: Identify the global flag usage

    To replace all occurrences on each line, the 'g' flag is needed after the substitution pattern.
  2. Step 2: Check each option

    sed 's/apple/orange/g' file.txt uses s/apple/orange/g which correctly replaces all 'apple' with 'orange'. sed 's/apple/orange/' file.txt replaces only first occurrence. sed 'replace apple with orange' file.txt is invalid syntax. sed 's/apple/orange//g' file.txt has extra slashes causing syntax error.
  3. Final Answer:

    sed 's/apple/orange/g' file.txt -> Option D
  4. Quick Check:

    Use 'g' flag for all matches [OK]
Hint: Add 'g' after last slash to replace all matches [OK]
Common Mistakes:
  • Omitting the 'g' flag to replace all matches
  • Adding extra slashes causing syntax errors
  • Using incorrect command words like 'replace'
3. What will be the output of the following command if the input file contains the line apple apple apple?
sed 's/apple/orange/' file.txt
medium
A. orange orange orange
B. orange apple apple
C. apple orange apple
D. apple apple orange

Solution

  1. Step 1: Understand sed substitution without 'g'

    Without the 'g' flag, sed replaces only the first occurrence of 'apple' per line.
  2. Step 2: Apply substitution to the input line

    The first 'apple' becomes 'orange', the rest remain unchanged, resulting in 'orange apple apple'.
  3. Final Answer:

    orange apple apple -> Option B
  4. Quick Check:

    First match replaced only without 'g' [OK]
Hint: No 'g' means only first match changes per line [OK]
Common Mistakes:
  • Assuming all occurrences change without 'g'
  • Confusing order of words after substitution
  • Thinking sed changes input file by default
4. You wrote this sed command to replace 'foo' with 'bar' globally: sed 's/foo/bar/' file.txt. But only the first 'foo' per line is replaced. What is the fix?
medium
A. Add the 'g' flag: sed 's/foo/bar/g' file.txt
B. Use double quotes instead of single quotes
C. Add a space after 'bar/'
D. Use sed -i option to edit in place

Solution

  1. Step 1: Identify missing global flag

    The command lacks the 'g' flag, so only first occurrence per line is replaced.
  2. Step 2: Add the 'g' flag to fix

    Adding 'g' after the substitution pattern makes sed replace all occurrences per line.
  3. Final Answer:

    Add the 'g' flag: sed 's/foo/bar/g' file.txt -> Option A
  4. Quick Check:

    Global flag 'g' replaces all matches [OK]
Hint: Add 'g' to replace all matches, not just first [OK]
Common Mistakes:
  • Thinking quotes affect substitution behavior
  • Adding spaces inside substitution pattern
  • Confusing in-place edit with substitution flags
5. You want to replace the word 'error' with 'warning' only on lines containing 'log' in a file. Which sed command achieves this?
hard
A. sed '/log/ s/error/warning/g' file.txt
B. sed 's/error/warning/g /log/' file.txt
C. sed 's/error/warning/g if /log/' file.txt
D. sed 's/error/warning/g' file.txt | grep log

Solution

  1. Step 1: Understand conditional substitution in sed

    To apply substitution only on lines matching a pattern, use /pattern/ s/old/new/flags syntax.
  2. Step 2: Analyze options

    sed '/log/ s/error/warning/g' file.txt correctly applies substitution only on lines containing 'log'. Options A and C have invalid syntax. sed 's/error/warning/g' file.txt | grep log replaces everywhere then filters lines, which does not limit substitution.
  3. Final Answer:

    sed '/log/ s/error/warning/g' file.txt -> Option A
  4. Quick Check:

    Use address before s/// to limit lines [OK]
Hint: Put pattern before s/// to restrict substitution lines [OK]
Common Mistakes:
  • Placing substitution after pattern incorrectly
  • Trying to use if statements inside sed
  • Filtering lines after substitution instead of limiting it
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