Substring in Shell Script


Get Substring from a String

syntax

${string:position}

example

#!/bin/bash
string="abcgauravabcxyz"
echo "${string:0}"  # output -> abcgauravabcxyz 
echo "${string:1}"  # bcgauravabcxyz
echo "${string:4}"  # auravabcxyz


Get Last n Character from a String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string: -3}" # xyz


Get Substring With Specific Length From String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string:0:3}"
echo "${string:3:3}"


Get Shortest Match from Starting in A String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string#a*c}"  # from starting, shortest match


Get Longest Match from Starting in A String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string##a*c}" # from starting, longest match


Get Shortest Match from the End

#!/bin/bash
string="abcgauravabcxyz"
echo ${string%b*z}  # from ending, shortest match


Get Longest Match from the End

#!/bin/bash
string="abcgauravabcxyz"
echo "${string%%b*z}" # from ending, longest match 


Replace First Occurrence of Character in String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string/abc/xyz}"


Replace All Occurrence of Character in String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string//abc/xyz}"


Remove First Occurrence of Character in String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string/abc}"


Remove All Occurrence of Character in String

#!/bin/bash
string="abcgauravabcxyz"
echo "${string//abc}"



let's create a script and execute it.

#!/bin/bash

string="abcgauravabcxyz"

echo "${string:0}"
echo "${string:1}"
echo "${string:4}"
echo "${string:0:3}"
echo "${string:3:3}"
echo "${string: -5}"

echo "${string#a*c}"  # from starting, shortest match
echo "${string##a*c}" # from starting, longest match

echo ${string%b*z}  # from ending, shortest match
echo "${string%%b*z}" # from ending, longest match

string="abcgauravabcxyz"

echo "${string/abc/xyz}"
echo "${string//abc/xyz}"

echo "${string/abc}"
echo "${string//abc}"


output

┌──(gaurav㉿learning-ocean)-[~/shellscript-youtube]
└─$ ./substring.sh
abcgauravabcxyz
bcgauravabcxyz
auravabcxyz
abc
gau
bcxyz
gauravabcxyz
xyz
abcgaurava
a
xyzgauravabcxyz
xyzgauravxyzxyz
gauravabcxyz
gauravxyz