A few days ago I showed a quick way to extract one table form a mysqldump output. Here is a more complete version which supports extracting either a full schema or a table from the specified schema. If full schema is being extracted, the script also looks for any associated views and routines.
Usage is simple:
garfield ~ # ./extract.sh -f dump.sql -d redmine > redmine.sql
garfield ~ # ./extract.sh -f dump.sql -d redmine -t workflows > redmine-workflows.sql
extract.sh
#!/bin/bash # # Extracts a schema or a table from a text dump generated by mysqldump or phpMyAdmin # (c) 2012 Maciej Dobrzanski http://www.dbasquare.com/ # Released under GNU General Public License, version 2 # function help() { cat <<EOF Usage: [-h] -f <dump file> -d <database name> [-t <table>] EOF } while getopts "hf:d:t:" flag ; do case $flag in h) help exit 255 ;; f) EX_DFILE=${OPTARG} ;; d) EX_SCHEMA=${OPTARG} ;; t) EX_TABLE=${OPTARG} ;; \?) echo "Invalid option: -$OPTARG" ;; esac done : ${EX_DFILE?"Missing argument: -f must be specified; try '$0 -h' for details"} : ${EX_SCHEMA?"Missing argument: -d must be specified; try '$0 -h' for details"} if [ ! ${EX_TABLE} ] ; then sed -n \ -e '1,/^-- \(Current \)\?Database/{/^\(--.*\)*\?$/d ; p } ; /^-- \(Current \)\?Database: `'"${EX_SCHEMA}"'`/,/^-- \(Current \)\?Database/ { /^-- \(Current \)\?Database/b ; /^\/\*\![0-9]\+.*=@OLD/be ; /^--$/d ; p }' \ -e ':e /^\/\*\![0-9]\+.*=@OLD/,${ p }' "${EX_DFILE}" else sed -n \ -e '1,/^-- \(Current \)\?Database/{/^\(--.*\)*\?$/d ; p } ; /^-- \(Current \)\?Database: `'"${EX_SCHEMA}"'`/,/^-- \(Current \)\?Database/{ /^-- Table.*`'"${EX_TABLE}"'`/,/^-- \(Table\|Temporary\|\(Current \)\?Database\)/ { /^-- \(Table\|Temporary\|\(Current \)\?Database\)/b ; /^\/\*\![0-9]\+.*=@OLD/be ; /^--$/d ; p } }' \ -e ':e /^\/\*\![0-9]\+.*=@OLD/,${ p }' "${EX_DFILE}" fi
PlanetMySQL Voting: Vote UP / Vote DOWN