Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Textdatei per Shell-Script ändern

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
markr



Anmeldungsdatum: 04.08.2002
Beiträge: 1

BeitragVerfasst am: 04. Aug 2002 16:18   Titel: Textdatei per Shell-Script ändern

Hallo Leute,

wie kann ich per Shell-Script eine Textdatei ändern? Bin leider noch Anfänger. Habe zuerst versucht, per Shell-Script vi aufzurufen, aber wie gelange ich dann wieder vom Eingabemodus in den Befehlsmodus. Escape ausführen geht wohl nicht oder? In der Datei muss nur eine bestimmte Zeile gesucht und ersetzt werden.

Vielen Dank für eure Hilfe im voraus.

Mark
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

hugenay
Gast





BeitragVerfasst am: 05. Aug 2002 8:23   Titel: Re: Textdatei per Shell-Script ändern

sed oder awk ist hier das mittel der wahl.
Für einfaches ersetzen reicht sed, vor allem hier, wo vielleicht schon ein einzeiler hilft. Für Komplexeres eher awk, die manpages sind sehr gut. Sonst gibts auch nen haufen doku im netz, buecher aus papier sowieso.
gruss hug.
 

tj
Gast





BeitragVerfasst am: 05. Aug 2002 12:47   Titel: Re: Textdatei per Shell-Script ändern

Hi,

Text ersetzen per awk mit einem Script 'replace' :

---------------------- snip ----------------
#! /bin/bash

command="`basename $0`"
usage="usage: $command <find-string> <replace-string>"

case $# in
2)
awk -v find="$1" -v repl="$2" '{gsub(find,repl); print; }'
exit;;
*) echo $usage; exit;;
esac

-------------------- snip ----------------

benutzen z.B. mit

cat oldfile | replace oldtext newtext > newfile


geht mit sed sicherlich eleganter, oder?

tj
 

MacOne
Gast





BeitragVerfasst am: 05. Aug 2002 16:46   Titel: Re: Textdatei per Shell-Script ändern

... um nicht mit Kanonen auf Spatzen zu schiessen:

als Ausgangsbasis:

sed -e "s/REG_AUSDRUCK/IRGEND_WAS_ANDERES/" /tmp/x # gibt die Datei /tmp/x auf dem Bildschirm aus und ersetzt dabei
# REG_AUSDRUCK durch IRGEND_WAS_ANDERES
# Beachte: an der Datei wird nichts geändert!!!
cp /tmp/x /tmp/y
sed -e "s/REG_AUSDRUCK/IRGEND_WAS_ANDERES/" < /tmp/y > /tmp/x # macht das gleiche wie vorher, liest aber aus /tmp/y ein
# und schreibt das Ergebnis nach /tmp/y

was auch noch ganz nützlich ist:

sed -e '3d' /tmp/x # gibt die Datei /tmp/x auf dem Bildschirm aus und löscht dabei die dritte Zeile
# analog zu oben kann das ganze auch direkt auf die Datei angewandt werden

So und nun heissts sich mit regulären Ausdrücken und den Feinheiten vertraut machen
Einfach mal in die Manpages kucken!
 

Descartes
Gast





BeitragVerfasst am: 05. Aug 2002 18:06   Titel: Re: Textdatei per Shell-Script ändern

und wenn man direkt und ohne temporäre Dateien in einer Textdatei etwas ersetzen möchte kann man auch Perl verwenden das ja eh meist schon installiert ist.

Beispiel um in allen *.txt Dateien das Wörtchen "dies" zu ersetzen durch "das" wobei vor Änderungen von jeder Datei eine Sicherungskopie mit Dateiendung *.bak angelegt wird:

perl -npi.bak -e 's/dies/das/g' *.txt

Wer die Generierung der Sicherungsdateien unterbinden möchte, lässt einfach den Parameter "-i.bak" weg:

perl -np -e 's/dies/das/g' *.txt
 

Descartes
Gast





BeitragVerfasst am: 05. Aug 2002 18:11   Titel: Re: Textdatei per Shell-Script ändern

Da hatte sich ein kleiner Fehler eingeschlichen.

Korrektur:
Wer die Generierung der Sicherungsdateien unterbinden möchte, lässt einfach bei dem Parameter "-i.bak" das ".bak" weg:
perl -npi -e 's/dies/das/g' *.txt

Das ganze kann man dann noch mit einem find Aufruf verbinden um gleich ganze Dateibäume zu bearbeiten:

find . -type f -name "*.txt" -print0 | xargs -0 perl -npi -e 's/dies/das/g'
 

MarkR.
Gast





BeitragVerfasst am: 13. Aug 2002 14:16   Titel: Re: Textdatei per Shell-Script ändern

Hab's nun hinbekommen. Hier das Ergebnis:

#! /bin/sh
#
#
#dieses Script ersetzt in der squid.conf die
#acl " zeit" durch eine neue mit einer anderen Zeit
#und startet Squid neu
echo ''
echo ''
echo ''
echo 'Bitte geben Sie die Anfangszeit an.'
echo 'Und beachten Sie dabei folgendes Schema:'
echo 'z.B. 08:00'
echo -n 'Anfangszeit: '
IFS=: read anfanghh anfangmm
echo -n 'Endezeit: '
IFS=: read endehh endemm

if [ "$anfanghh" -ge 0 -a "$anfanghh" -lt 25 -a "$anfangmm" -ge 0 -a "$anfangmm" -lt 60 -a "$endehh" -ge 0 -a "$endehh" -lt 25 -a "$endemm" -ge 0 -a "$endemm" -lt 60 ]
then

sed -e '
/acl zeit time/c\
acl zeit time SMTWHFA '$anfanghh':'$anfangmm'-'$endehh':'$endemm'
' < /etc/squid.conf > /home/temp/squid.conf

mv /home/temp/squid.conf /etc/squid.conf
rcsquid reload
echo ''
echo ''
echo ''
echo ''
echo 'Die Änderungen wurden vorgenommen.'
echo 'Die Teilnehmer dürfen nun von '$anfanghh':'$anfangmm'-'$endehh':'$endemm' im Internet surfen.'

else
echo ''
echo ''
echo ''
echo 'Bitte beachten Sie das vorgegebene Format!!'
echo 'Und geben Sie eine gültige Zeit ein.'
echo 'Wiederholen Sie den Vorgang.'
exit 1
fi
exit
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy