Search code examples
bashshell

Replace one substring for another string in shell script


I have "I love Suzi and Marry" and I want to change "Suzi" to "Sara".

firstString="I love Suzi and Marry"
secondString="Sara"

Desired result:

firstString="I love Sara and Marry"

Solution

  • To replace the first occurrence of a pattern with a given string, use ${parameter/pattern/string}:

    #!/bin/bash
    firstString="I love Suzi and Marry"
    secondString="Sara"
    echo "${firstString/Suzi/"$secondString"}"
    # prints 'I love Sara and Marry'
    

    To replace all occurrences, use ${parameter//pattern/string}:

    message='The secret code is 12345'
    echo "${message//[0-9]/X}"
    # prints 'The secret code is XXXXX'
    

    (This is documented in the Bash Reference Manual, §3.5.3 "Shell Parameter Expansion".)

    Note that this feature is not specified by POSIX — it's a Bash extension — so not all Unix shells implement it. For the relevant POSIX documentation, see The Open Group Technical Standard Base Specifications, Issue 7, the Shell & Utilities volume, §2.6.2 "Parameter Expansion".