Bash string manipulation

I have a set of files which I want to rename by special pattern. The set of files is in form like image{1..30}.jpg and I need all files in form image{1..30}.thumbnail.jpg.

Result script is

#! /bin/bash
for file in *.jpg; do
    parts=(${file//./ });
    newfile=${parts[0]}'.thumb.'${parts[1]}
    mv $file $newfile
done

As bonus small collection of commands for string manipulation in bash

  • array=(${string//./ }) - split string to array by character (in this case, point);
  • ${#string} string length;
  • ${string:start:length} - extract a substring from start with length characters;
  • ${string/pattern/replace} - find and replace first match;
  • ${string//pattern/replace} - find and replace all matches;

Check if string contains substring, first alternative

string='lorem ipsum';
if [[ $string =~ ipsum ]]
then
  echo "It's there!";
fi

Second alternative

case "$string" in
    *lorem* ) echo "I've found lorem";;
    *foo* ) echo "I've found foo";;
    * ) echo "I have not found any interesting ...";;
esac
comments powered by Disqus