String Manipulation 字串處理

字串長度 
 my_string="abhishek"
echo "length is ${#my_string}" 
 Using expr 
 str="my string"
length=$(expr length "$str")
echo "Length of my string is $length" 
 Using awk 
 echo "my string" | awk '{print length}' 
 Using wc 
 str="my string"
length=$(echo -n "my string" | wc -m)
echo "Length of my string is $length" 
 字串比對 
 Using wildcards 
 #!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'
if [[ "$STR" == *"$SUB"* ]]; then
 echo "It's there."
fi 
 Using case 
 #!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'

case $STR in

 *"$SUB"*)
 echo -n "It's there."
 ;;
esac 
 Using Regex 
 #!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'

if [[ "$STR" =~ .*"$SUB".* ]]; then
 echo "It's there."
fi 
 Using Grep 
 #!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'

if grep -q "$SUB" <<< "$STR"; then
 echo "It's there"
fi 
 字串合併 
 str1="hand"
str2="book"
str3=$str1$str2 
 STR="Hello"
STR+=", World"
echo $STR 
 字元提取 
 foss="Fedora is a free operating system"
echo ${foss:0:6} 
 _admin_ip="202.54.1.33|MUM_VPN_GATEWAY 23.1.2.3|DEL_VPN_GATEWAY 13.1.2.3|SG_VPN_GATEWAY"
for e in $_admin_ip
do
 ufw allow from "${e%%|*}" to any port 22 proto tcp comment 'Open SSH port for ${e##*|}'
done 
 字元取代 
 foss="Fedora is a free operating system"
echo ${foss/Fedora/Ubuntu} 
 Summary: String Manipulation and Expanding Variables 
 
 
 
 ${parameter:-defaultValue} 
 Get default shell variables value 
 
 
 ${parameter:=defaultValue} 
 Set default shell variables value 
 
 
 ${parameter:?"Error Message"} 
 Display an error message if parameter is not set 
 
 
 ${#var} 
 Find the length of the string 
 
 
 ${var%pattern} 
 Remove from shortest rear (end) pattern 
 
 
 ${var%%pattern} 
 Remove from longest rear (end) pattern 
 
 
 ${var:num1:num2} 
 Substring 
 
 
 ${var#pattern} 
 Remove from shortest front pattern 
 
 
 ${var##pattern} 
 Remove from longest front pattern 
 
 
 ${var/pattern/string} 
 Find and replace (only replace first occurrence) 
 
 
 
 ${var//pattern/string} 
 echo "${PATH//:/$'\n'}" 
 
 Find and replace all occurrences 
 
 
 ${!prefix*} 
 Expands to the names of variables whose names begin with prefix. 
 
 
 
 ${var,} 
 ${var,pattern} 
 
 Convert first character to lowercase. 
 
 
 
 ${var,,} 
 ${var,,pattern} 
 
 Convert all characters to lowercase. 
 
 
 
 ${var^} 
 ${var^pattern} 
 
 Convert first character to uppercase. 
 
 
 
 ${var^^} 
 ${var^^pattern} 
 
 Convert all character to uppercase. 
 
 
 
 Cheatsheet: String Manipulation 
 
 String To Integer 
 # $((string))
sum=$((3+6))
echo $sum

a=11
b=3
c=$(($a+$b))
echo $c 
 Alternate method: expr 
 
 Note that it is not a “native” Bash procedure, as you need to have coreutils installed (by default on Ubuntu) as a separate package. 
 
 a=5; b=3; c=2; d=1
expr $a + $b \* $c - $d 
 去除變數的末端字元 .XXX 
 # Operator "#" means "delete from the left, to the first case of what follows."
x="This is my test string."
echo ${x#* }

is my test string.

# Operator "##" means "delete from the left, to the last case of what follows."
x="This is my test string."
echo ${x##* }

string.

# Operator "%" means "delete from the right, to the first case of what follows."
x="This is my test string."
echo ${x% *}

This is my test

# Operator "%%" means "delete from the right, to the last case of what follows."
x="This is my test string."
$ echo ${x%% *}

This