#!/bin/sh if [ "$1" = "-v" ] then if [ "$2" != "-r-e-i-n-i-" ] then /usr/bin/time -p $0 -v -r-e-i-n-i- exit fi clear b=10 a=0 while : do a=`expr "$a" + 1` if [ $a -eq $b ] then b=`expr "$b" + 1` if [ $b -eq 83 ] then break fi a=1 fi echo "\033[2d\033["$a"a\033[30mt\033[31m Reini\033[0m" done a=0 b=10 while : do a=`expr "$a" + 1` if [ $a -eq $b ] then b=`expr "$b" + 1` if [ $b -eq 80 ] then break fi a=1 fi echo "\033[2d\033["$a"a\033[30mt\033[31mmfg\033[0m" done a=0 b=10 while : do a=`expr "$a" + 1` if [ $a -eq $b ] then b=`expr "$b" + 1` if [ $b -eq 64 ] then break fi a=1 fi echo "\033[1d\033["$a"a\033[30mt\033[33mdate=06.04.2018\033[0m" done a=0 b=10 while : do a=`expr "$a" + 1` if [ $a -eq $b ] then b=`expr "$b" + 1` if [ $b -eq 29 ] then break fi a=1 fi echo "\033[1d\033["$a"a\033[30mt\033[32mReinis Ersetzungstool Release V0.2\033[0m" done b=83 a=0 while : do a=`expr "$a" + 1` if [ $a -eq $b ] then b=`expr "$b" - 1` if [ $b -eq 27 ] then break fi a=1 fi echo "\033[2d\033["$a"a\033[30mt\033[31mmfg Reini \033[0m" done y=36 for x in i n i e R " " g f m do y=`expr "$y" - 1` if [ $y -lt 27 ] then break fi echo "\033[2d\033["$y"a\033[30mt\033[33m"$x"\033[0m" sleep 0.1 done y=36 for x in i n i e R " " g f m do y=`expr "$y" - 1` if [ $y -lt 27 ] then break fi echo "\033[2d\033["$y"a\033[30mt\033[31m"$x"\033[0m" sleep 0.1 done exit 1 fi ist=`echo -n "$*" | sed -e 's/[^=]//g' | wc -m` pgn=`basename $0` if [ "$1" = "-cr" ] then cr=1 else if [ "$#" -lt "4" ]||[ "$ist" -lt 3 ] then echo "####################################################################################" echo "\033[32;1m$pgn Release V0.2\033[0m" echo "####################################################################################" echo "\033[32m$pgn -Options files\033[0m" echo "####################################################################################" echo "\033[1;4;32mOptions:\033[0m" echo "\033[4m-zn= -fn= -ed= -ie= -de= -ov\033[0m" echo "" echo "\033[32mZeilen Nummer\033[0m" echo "\033[4m-zn=\033[0m" echo "Gibt an in welcher Zeile manipuliert werden soll." echo "" echo '\033[32m'"Feld Nummer"'\033[0m' echo "\033[4m-fn=\033[0m" echo "Gibt an in welcher Spalte manipuliert werden soll." echo "" echo '\033[32m'"Ersetzung"'\033[0m' echo "\033[4m-ed=\033[0m" echo "Gibt an wodurch Feld ersetzt werden soll." echo "" echo '\033[33m'"Ausnahme ( optional )"'\033[0m' echo "\033[4m-ie=\033[0m" echo "Gibt an bei welchen Zelleninhalt NICHT!!! ersetzt werden soll." echo "" echo '\033[33m'"Feldtrennungszeichen - Delimiter ( optional )"'\033[0m' echo "\033[4m-de=\033[0m" echo "Gibt an durch welches Zeichen Felder getrennt sind." echo "Default \033[4m-de=\" \"\033[0m" echo "Trennungszeichen in \" \" anfuehren" echo "" echo '\033[33m'"Ueberschreiben ( optional )"'\033[0m' echo "\033[4m-ov\033[0m" echo "Ueberschreibt die Originaldatei" echo "" echo '\033[32m'"files"'\033[0m' echo "Liste von Files die bearbeitet werden sollen." echo "" echo '\033[32m'"EXAMPLE"'\033[0m' echo "$0" '-zn=17 -fn=16 -ie=danicht -ed=text -de=";" *.txt' echo 'Ersetzt in allen Dateien mit Endung .txt in Zeile 17 und Spalte 16 das durch ";" getrennte Feld mit text ausser das Feld hat den Inhalt danicht.' echo "" echo '\033[33m'"Crontab-Syntax ( optional )"'\033[0m' echo "\033[4m-cr\033[0m" echo "Erzeugt eine einzeilige Syntax fuer zB. Crontab" echo "\033[31moverrult alle anderen Optionen!\033[0m" echo "" echo '\033[32m'"-v Version"'\033[0m' echo "animierte Versionsausgabe loescht Screen" exit 1 fi de=" " while ! [ -f "$1" ] do para=`echo "$1"|cut -f1 -d"="` if [ "$para" = "-zn" ] then zn=`echo "$1"|cut -f2 -d"="` fi if [ "$para" = "-fn" ] then fn=`echo "$1"|cut -f2 -d"="` fi if [ "$para" = "-ed" ] then ed=`echo "$1"|cut -f2 -d"="` fi if [ "$para" = "-ie" ] then ie=`echo "$1"|cut -f2 -d"="` fi if [ "$para" = "-de" ] then de=`echo "$1"|cut -f2 -d"="` fi if [ "$para" = "-ov" ] then ov=1 mkdir /tmp/$pgn 2>/dev/null fi if [ "$para" = "-cr" ] then cr=1 fi shift done fi if [ -n "$cr" ] then echo -n "\033[32mZu bearbeitende \033[33mDatei:\033[0m" read dai echo -n "\033[32mZu bearbeitende \033[33mZeile:\033[0m" read zn echo -n "\033[32mZu bearbeitendes \033[33mFeld:\033[0m" read fn echo "\033[32mFelder sind getrennt durch \033[33mFeldtrennungszeichen\033[0m" echo -n "\033[32mReturn ist \033[33mBlank!:\033[0m" read de if [ -z "$de" ] then de=`echo " "` fi echo -n "\033[32mEin zu fuegender \033[33mText:\033[0m" read ed echo -n "\033[31mUeberscheiben? \033[32mansonsten wird new_Datei angelegt:\033[33m[j]\033[0m" read ov if [ -n "$ov" ] then echo "\033[32mSyntax \033[31mueberschreibt \033[32moriginal Datei!\033[0m" echo "for a in $dai;do b=\`basename \"\$a\"\`;awk '{ if ( NR != $zn || \$'$fn' = VAR );print }' \"FS=$de\" \"OFS=$de\" \"VAR=$ed\" \"\$a\" >> \"/tmp\"/new_\"\$b\";mv -f \"/tmp\"/new_\"\$b\" \"\$a\";done" else echo "\033[32mSyntax schreibt \033[33mnew_$dai\033[32m!\033[0m" echo "for a in $dai;do b=\`basename \"\$a\"\`;d=\`dirname \"\$a\"\`;awk '{ if ( NR != $zn || \$'$fn' = VAR );print }' \"FS=$de\" \"OFS=$de\" \"VAR=$ed\" \"\$a\" >> \"\$d\"/new_\"\$b\";done" fi exit fi if [ "$zn" -lt 1 ]||[ "$fn" -lt 1 ]||[ -z "$ed" ] then echo "Einer der Parameter ist \033[31mkleiner\033[0m 0; oder \033[31mnicht\033[0m gesetzt." echo "Fuer Feld Loeschung bitte \033[1m-ed\" \"\033[0m verwenden!" exit 2 fi echo "Ersetze Feld \033[1m$fn\033[0m in Zeile \033[1m$zn\033[0m durch \033[4m$ed\033[0m in \033[33m$*\033[0m" echo "Eingabe korrekt? [j]" read bestaet if [ $bestaet != "j" ] then echo "\033[31mAbbruch durch Benutzer\033[0m" exit 3 else while [ $# -ne 0 ] do nam=`basename $1` dirn=`dirname $1` lines=`wc -l "$1"|cut -f1 -d" "` vzn=`expr "$zn" - 1` nzn=`expr "$lines" - "$zn"` inha=`head -n"$zn" "$1"|tail -n1|cut -d"$de" -f"$fn"` dem=`head -n"$zn" $1|tail -n1|sed -e "s/[^$de]//g" | wc -m` if [ "$ie" = "$inha" ] then echo "Inhalt in Datei \033[33m$1\033[0m lautet \033[32m$inha\033[0m und wird wegen Parameter \033[4m-ie=$ie\033[0m \033[31mnicht\033[0m geaendert!" else if [ $dem -lt $fn ] then echo "Weniger durch \033[1m\"$de\"\033[0m getrennte Felder als angegeben in \033[33m$1\033[0m, daher \033[31mkeine\033[0m Aenderung!" else if [ -n "$ov" ] then head -n"$vzn" "$1" >> /tmp/$pgn/new_"$nam" head -n"$zn" "$1"|tail -n1|awk '{ $'$fn' = VAR; print }' "FS=${de}" "OFS=${de}" "VAR=${ed}" >> /tmp/$pgn/new_"$nam" tail -n"$nzn" "$1" >> /tmp/$pgn/new_"$nam" mv -f /tmp/$pgn/new_"$nam" "$1" echo "Ersetze in Datei \033[33m$1\033[0m das Feld \033[1m$fn\033[0m in Zeile \033[1m$zn\033[0m mit Inhalt \033[32m$inha\033[0m durch \033[4m$ed\033[0m und schreibe in \033[33m$1\033[0m" else head -n"$vzn" "$1" >> "$dirn"/new_"$nam" head -n"$zn" "$1"|tail -n1|awk '{ $'$fn' = VAR; print }' "FS=${de}" "OFS=${de}" "VAR=${ed}" >> "$dirn"/new_"$nam" tail -n"$nzn" "$1" >> "$dirn"/new_"$nam" echo "Ersetze in Datei \033[33m$1\033[0m das Feld \033[1m$fn\033[0m in Zeile \033[1m$zn\033[0m mit Inhalt \033[32m$inha\033[0m durch \033[4m$ed\033[0m und schreibe nach \033[33m$dirn/new_$nam\033[0m" fi fi fi shift done fi exit 0