pat1='str' pat2='[^;]' pat3='[[:alnum:]_]' pat4='[[:alnum:]][[fu]b' pat5='?tr' pat6='?tr\' pat7='[[:alnum:]]_' pat8='*tr' declare z="start" declare NUM=1000 #---------------------------------- # create a long string with ';' #---------------------------------- for ((i=0; i<$NUM; i++)); do z="$z;string$i" done #z="$z;string;foo" #------------------------------ # delete everything except ';' #------------------------------ # try different patterns here x="${z//$pat1}" echo $x x="${z//$pat2}" echo $x x="${z//$pat3}" echo $x x="${z//$pat4}" echo $x x="${z//$pat5}" echo $x x="${z//$pat6}" echo $x x="${z//$pat7}" echo $x x="${z//$pat8}" echo $x declare z="start" declare NUM=1000 #---------------------------------- # create a long string with ';' #---------------------------------- for ((i=0; i<$NUM; i++)); do z="$z;string$i" done #z="$z;string;foo" #------------------------------ # delete everything except ';' #------------------------------ # try different patterns here x="${z//[^;]}" echo $x x="${z/#[^;][^;]}" echo $x x="${z/%[^;][^;]}" echo $x export LANG=C LC_ALL=C LC_CTYPE=C # try different patterns here x="${z//$pat1}" echo $x x="${z//$pat2}" echo $x x="${z//$pat3}" echo $x x="${z//$pat4}" echo $x x="${z//$pat5}" echo $x x="${z//$pat6}" echo $x x="${z//$pat7}" echo $x x="${z//$pat8}" echo $x # try different patterns here x="${z//[^;]}" echo $x x="${z/#[^;][^;]}" echo $x x="${z/%[^;][^;]}" echo $x