#!/bin/bash #=================================================================================== # # FILE: simple-edit.sh # # USAGE: simple-edit.sh filename # # DESCRIPTION: Edit the text file 'filename'. # simple-edit is a line editor. It supports editing single lines # by entering the line number. Supported commands are 'show', # 'wq' (write and quit) and 'q!' (quit without saving). # # OPTIONS: none # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: Hans-Georg Eßer (hge), esser.hans-georg@fh-swf.de # COMPANY: FH Südwestfalen, Iserlohn # VERSION: 1.0 # CREATED: 06.10.2017 - 20:39 # REVISION: 06.10.2017 - 20:39 #=================================================================================== function show { for i in $( seq 0 $lines ); do printf "%3d: " $i; echo "${zeilen[i]}" done } function fehler { echo "$0: Fehler: $1"; exit 1; } # Test auf Fehler: Kein Dateiname (oder zu viele Argumente) if [ $# -ne 1 ]; then fehler "Aufruf: $0 filename." fi filename=$1 # Test auf Fehler: Datei nicht vorhanden if [ ! -f $filename ]; then fehler "Datei \"$filename\" existiert nicht." fi lines=$( wc -l < $filename ) # Anzahl Zeilen for i in $( seq 0 $lines ); do read -r; zeilen[$i]="$REPLY" # zeilenweise einlesen done < $filename show while true; do echo -n "Zeilennummer oder 'wq', 'q!' oder 'show' eingeben: " read linenumber if [ "Z$linenumber" == "Z" ]; then continue fi if [ $linenumber == "q!" ]; then break fi if [ $linenumber == "wq" ]; then for i in $( seq 0 $lines ); do printf "%s\n" "${zeilen[i]}" done > tmp.out break fi if [ $linenumber == "show" ]; then show continue fi # Pruefen, ob Eingabe eine Zahl ist zahlen='^[0-9]+$' if ! [[ $linenumber =~ $zahlen ]] ; then echo "Fehler: Weder Zeilennummer noch Editor-Kommando" continue fi # Pruefen, ob Zeilennummer gueltig if [ $linenumber -gt $lines ]; then echo "Fehler: Zeile" $linenumber "existiert nicht." continue fi echo Ersetze Zeile $linenumber printf "%3d: " $linenumber; echo "${zeilen[linenumber]}" printf "%3d: " $linenumber read; zeilen[$linenumber]="$REPLY" echo Zeile $linenumber ersetzt. done