Bird
Raised Fist0
Linux CLIscripting~5 mins

sed substitution in Linux CLI - Commands & Configuration

Choose your learning style10 modes available
Introduction
Sometimes you need to quickly change words or letters inside a text file or output without opening an editor. The sed substitution command lets you do this by finding text and replacing it with new text right from the command line.
When you want to fix a typo in a configuration file without opening an editor.
When you need to replace all occurrences of a word in a log file to anonymize data.
When you want to change a specific string in multiple files using a script.
When you want to test how a text looks with some words changed before saving.
When you want to quickly replace text in the output of another command.
Commands
This command replaces the word 'world' with 'there' in the text 'Hello world'. It shows how sed substitution works on a simple string.
Terminal
echo "Hello world" | sed 's/world/there/'
Expected OutputExpected
Hello there
This command replaces the first occurrence of 'apple' with 'orange' on each line of the file fruits.txt and prints the result to the screen.
Terminal
sed 's/apple/orange/' fruits.txt
Expected OutputExpected
orange pie orange juice orange tart
This command replaces all occurrences of 'apple' with 'orange' in the file fruits.txt and saves the changes directly to the file using the -i flag.
Terminal
sed -i 's/apple/orange/g' fruits.txt
Expected OutputExpected
No output (command runs silently)
→
-i - Edit the file in place, saving changes directly
→
g - Replace all occurrences on each line, not just the first
This command finds the word 'apple' and adds the word 'pie' after it using grouping \( \) and backreference \1.
Terminal
sed 's/\(apple\)/\1 pie/' fruits.txt
Expected OutputExpected
apple pie pie apple juice apple tart pie
Key Concept

If you remember nothing else from this pattern, remember: sed substitution uses s/old/new/ to find and replace text, and flags like g and -i control how and where replacements happen.

Common Mistakes
Forgetting to escape special characters like slashes in the search or replacement text.
sed will misinterpret the command and give errors or wrong output.
Use backslashes \ to escape special characters or choose a different delimiter like s|old|new|.
Not using the -i flag when you want to save changes to the file.
sed will only print the changed text to the screen but will not modify the file.
Add the -i flag to edit the file in place.
Not using the g flag when you want to replace all occurrences on a line.
Only the first match on each line will be replaced, leaving others unchanged.
Add the g flag at the end of the substitution command to replace all matches.
Summary
Use sed substitution with s/old/new/ to replace text in streams or files.
Add the g flag to replace all matches on each line, not just the first.
Use the -i flag to save changes directly to the file instead of just printing.

Practice

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

Solution

  1. Step 1: Understand the sed substitution syntax

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

    It replaces only the first 'cat' found on each line with 'dog', not all occurrences or lines.
  3. Final Answer:

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

    sed s/pattern/replacement/ replaces first match per line [OK]
Hint: No 'g' flag means only first match per line replaced [OK]
Common Mistakes:
  • Thinking all matches are replaced 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' using sed?
easy
A. sed 's/apple/orange/' file.txt
B. sed 's/apple/orange/g' file.txt
C. sed 's/apple/orange/g;' file.txt
D. sed 's/apple/orange/gp' file.txt

Solution

  1. Step 1: Identify the flag for global replacement

    The 'g' flag after the substitution pattern tells sed to replace all occurrences on each line.
  2. Step 2: Check syntax correctness

    sed 's/apple/orange/g' file.txt uses sed 's/apple/orange/g' which is the correct syntax without extra characters.
  3. Final Answer:

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

    'g' flag means replace all matches per line [OK]
Hint: Add 'g' after last slash to replace all matches [OK]
Common Mistakes:
  • Omitting the 'g' flag for all replacements
  • Adding extra semicolons inside quotes
  • Using 'gp' which is invalid here
3. What is the output of this command if input.txt contains:
apple apple banana
banana apple apple

sed 's/apple/orange/' input.txt?
medium
A. orange orange banana banana orange orange
B. orange apple banana banana apple apple
C. orange apple banana banana orange apple
D. apple apple banana banana apple apple

Solution

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

    Without 'g', only the first 'apple' on each line is replaced by 'orange'.
  2. Step 2: Apply substitution line by line

    Line 1: 'apple apple banana' becomes 'orange apple banana'. Line 2: 'banana apple apple' becomes 'banana orange apple'.
  3. Final Answer:

    orange apple banana banana orange apple -> Option C
  4. Quick Check:

    First match per line replaced only [OK]
Hint: No 'g' means only first match per line changes [OK]
Common Mistakes:
  • Replacing all 'apple' without 'g'
  • Replacing none due to misunderstanding
  • Confusing line order or content
4. Identify the error in this sed command: sed 's/hello/world/g file.txt'
medium
A. File name should come before the command
B. Incorrect delimiter used
C. Missing 'g' flag for global replacement
D. Missing closing quote after 'g'

Solution

  1. Step 1: Check the quotes in the command

    The command has an opening single quote before s/hello/world/g but no closing quote after 'g'.
  2. Step 2: Confirm correct placement of quotes and arguments

    The file name should be outside the quotes. The missing closing quote causes syntax error.
  3. Final Answer:

    Missing closing quote after 'g' -> Option D
  4. Quick Check:

    Quotes must enclose entire sed expression [OK]
Hint: Always close quotes around sed expression [OK]
Common Mistakes:
  • Placing file name inside quotes
  • Forgetting closing quote
  • Confusing delimiter with quotes
5. You want to replace all occurrences of 'foo' with 'bar' only on lines containing 'baz' in data.txt. Which command achieves this?
hard
A. sed '/baz/ s/foo/bar/g' data.txt
B. sed 's/foo/bar/g /baz/' data.txt
C. sed 's/foo/bar/g' data.txt | grep baz
D. sed '/foo/ s/baz/bar/g' data.txt

Solution

  1. Step 1: Understand address restriction in sed

    Using /baz/ s/foo/bar/g applies substitution only on lines matching 'baz'.
  2. Step 2: Verify command correctness

    sed '/baz/ s/foo/bar/g' data.txt correctly restricts substitution to lines with 'baz' and replaces all 'foo' with 'bar'.
  3. Final Answer:

    sed '/baz/ s/foo/bar/g' data.txt -> Option A
  4. Quick Check:

    Address before command limits lines affected [OK]
Hint: Use /pattern/ before s/// to limit lines [OK]
Common Mistakes:
  • Placing substitution after file name
  • Using grep after sed instead of address
  • Mixing patterns in wrong order
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