可変パターン除去を使用できます。##は、「左から順に、パターンに一致するものをすべて削除する」ことを意味します。%%は、右から同じことを意味します。
tm=${timestamp##* }
dt=${timestamp%% *}
result="$tm $dt"
または、cutを使用して同じことを行い、フィールド区切り文字を指定することもできます。
tm=$(echo $timestamp | cut -f2 -d' ')
dt=$(echo $timestamp | cut -f1 -d' ')
result="$tm $dt"
または、sedを使用して正規表現と交換することもできます(他の投稿を参照)。
または、dateコマンドから日付を取得する場合は、次のようにフォーマットするように依頼できます。
result=$(date +'%r %F')
さらに言えば、日付を解析して、必要に応じて表現できるバージョンの日付がある場合があります。
result=$(date -d '12/12/2012 4:45 pm' +'%r %F')
確かに、この最後の1つは、日付の入力に注意が必要です...受け入れられる入力については、「情報の日付」を参照してください。
あなたが正規表現を使いたいのなら、私はPerlが好きです...彼らは書くのがよりきれいです:
echo $timestamp | perl -p -e 's/^(\S+)\s+(\S+)/$2 $1/'
ここで、\ Sはスペース以外の文字に一致し、+は「1つ以上」を意味し、\sはスペースに一致します。ペアレンは、一致したパーツをキャプチャします。
編集:
申し訳ありませんが、「timestamp=」が実際のデータの一部であることに気づいていませんでした。上記の例はすべて、最初にそのビットを取り除くと機能します。
var='timestamp=2012-12-12 16:45:11'
timestamp=${var#timestamp=}
... then as above ...