#!/bin/bash # $HeadURL$ $LastChangedRevision$ set -e PROGNAME=$(basename $0) # Load support functions . $(pcms-config PCMS_SHARE_PREFIX)/scripts/support.sh main() { local -a LINEINFILE_OPTS # Defaults for options VERBOSELEVEL=2 LOGIC=true PRESENT=unset BEFORE=unset AFTER=unset REPLACE=unset TEXT=unset FILE=unset # Process options while [ $# -ge 1 ]; do case $1 in --present=*|--before=*|--after=*|--replace=*|--text=*) LINEINFILE_OPTS=("${LINEINFILE_OPTS[@]}" "$1") ;; --file=*) FILE=${1#*=} ;; -d) VERBOSELEVEL=$2; shift ;; --debug=*) VERBOSELEVEL=${1#*=} ;; -v|--verbose) VERBOSELEVEL=3 ;; --) shift; break ;; -*) error "main: $1: bad option" ;; *) break ;; esac shift done # Sanity checks and derivations # Guts TMP_FILE=$(mktemp) TMP2_FILE=$(mktemp) ini2txt < $FILE > $TMP_FILE debug 10 "main: calling [lineinfile --debug=$VERBOSELEVEL ${LINEINFILE_OPTS[*]} --file=$TMP_FILE] ..." lineinfile --debug=$VERBOSELEVEL "${LINEINFILE_OPTS[@]}" --file=$TMP_FILE txt2ini < $TMP_FILE > $TMP2_FILE rm -f $TMP_FILE cmp -s $FILE $TMP2_FILE || cat $TMP2_FILE > $FILE rm -f $TMP2_FILE } ini2txt() { local LINE SECTION while read LINE; do if [[ $LINE =~ ^\[(.*)\]$ ]]; then SECTION=${BASH_REMATCH[1]} elif [[ $LINE =~ ^[\t\ ]*$ ]]; then : else echo "$SECTION:$LINE" fi done } txt2ini() { local LINE SECTION local -A SECTIONS cat > /tmp/$PROGNAME.$$.txt2ini while read LINE; do [[ $LINE =~ ^([^:]*):.* ]] SECTIONS[${BASH_REMATCH[1]}]=whatever done < /tmp/$PROGNAME.$$.txt2ini for SECTION in "${!SECTIONS[@]}"; do echo "[$SECTION]" sed -n "s/^$SECTION://p" /tmp/$PROGNAME.$$.txt2ini echo done } main "$@"