📖 Scenario: You are working on a script that processes a text file containing product names and prices. You want to update the prices by increasing them by 10% using sed substitution commands.
🎯 Goal: Build a bash script that uses sed to substitute old prices with new prices in a text file.
📋 What You'll Learn
Create a text file variable with product names and prices
Create a variable for the price increase percentage
Use sed substitution to update prices by 10%
Print the updated text to the terminal
💡 Why This Matters
🌍 Real World
Automating price updates in product lists or configuration files without manual editing.
💼 Career
Many automation and scripting jobs require text processing and substitution using tools like sed.
Progress0 / 4 steps
1
Create the initial product list
Create a variable called products that contains these exact lines as a multiline string: Apple 100 Banana 50 Cherry 75
Bash Scripting
Hint
Use double quotes and \n for new lines inside the string.
2
Set the price increase percentage
Create a variable called increase and set it to 10 to represent a 10% price increase.
Bash Scripting
Hint
Just assign the number 10 to the variable increase.
3
Use sed to increase prices by 10%
Use a sed command to substitute each price in products by increasing it by 10%. Use the echo command to pass products to sed. Store the result in a variable called updated_products. Use this exact sed expression: sed -E 's/([0-9]+)/echo $((\1 * 110 / 100))/ge'
Bash Scripting
Hint
The sed command uses s/([0-9]+)/echo $((\1 * 110 / 100))/ge to replace each number with the increased price.
4
Print the updated product list
Print the variable updated_products to display the updated product names and prices.
Bash Scripting
Hint
Use echo "$updated_products" to print the updated list.
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
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.
Step 2: Apply to the file content
Each line in file.txt will have its first 'cat' replaced by 'dog', other occurrences remain unchanged.
Final Answer:
Replaces the first occurrence of 'cat' with 'dog' on each line of file.txt -> Option C
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
Step 1: Identify the global flag usage
To replace all occurrences on each line, the 'g' flag is needed after the substitution pattern.
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.
Final Answer:
sed 's/apple/orange/g' file.txt -> Option D
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
Step 1: Understand sed substitution without 'g'
Without the 'g' flag, sed replaces only the first occurrence of 'apple' per line.
Step 2: Apply substitution to the input line
The first 'apple' becomes 'orange', the rest remain unchanged, resulting in 'orange apple apple'.
Final Answer:
orange apple apple -> Option B
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
Step 1: Identify missing global flag
The command lacks the 'g' flag, so only first occurrence per line is replaced.
Step 2: Add the 'g' flag to fix
Adding 'g' after the substitution pattern makes sed replace all occurrences per line.
Final Answer:
Add the 'g' flag: sed 's/foo/bar/g' file.txt -> Option A
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
Step 1: Understand conditional substitution in sed
To apply substitution only on lines matching a pattern, use /pattern/ s/old/new/flags syntax.
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.
Final Answer:
sed '/log/ s/error/warning/g' file.txt -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.