Kann mir bitte jemand hier verraten wie ich mittels einer bash (is fürn script) verschiedene Zeilen aus einer Datei löschen kann ?
N Beispiel wäre sehr schön ...
Per bash Zeilen aus einer Datei löschen ?
Re: Per bash Zeilen aus einer Datei löschen ?
Direkt aus einer Datei herauslöschen ist schwierig, da gibt es m.E. kein Standard-Kommando für. Wenn es Dir reicht, dass man beim Auslesen der Datei die entsprechenden Zeilen ausfiltert und das Ergebnis unter dem alten Namen abspeichert, kann man wie folgt vorgehen:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/bash
# Skript: filterout
if [ $# -eq 0 ] ; then
echo "Usage: $0 file [ file ... ]" >&2
exit 2
fi
ERROR_OCCURED=0
for ARG ; do
if sed '/RA-der-zu-löschende-zeilen-beschreibt/d' "$ARG" > "$ARG.$$" ; then
mv "$ARG.$$" "$ARG"
else
echo "$0: Error while deleting lines - no change to original file \<!--no-->"$ARG\<!--no-->"!" >&2
rm -f "$ARG.$$"
ERROR_OCCURED=1
fi
done
exit $ERROR_OCCURED
</font><hr></pre></blockquote>
Rückgabewerte sind 0 bei Erfolg, 1 bei Fehlern im Zeilenfiltern bei mind. einer Datei und 2 bei falschem Aufruf (ohne Parameter).
Das sed-Kommando kannst Du auch (falls Du Dich mit sed nicht wohlfühlst) durch ein
grep -v 'regulaerer-Ausdruck'
ersetzen, oder durch ein
fgrep -v 'fixe-Zeichenkette'
oder im Falle des Falles auch durch den awk, da kann man schön nach den Werten einzelner Felder in einer Zeile operieren.
Viel Spass dabei!
Jochen
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/bash
# Skript: filterout
if [ $# -eq 0 ] ; then
echo "Usage: $0 file [ file ... ]" >&2
exit 2
fi
ERROR_OCCURED=0
for ARG ; do
if sed '/RA-der-zu-löschende-zeilen-beschreibt/d' "$ARG" > "$ARG.$$" ; then
mv "$ARG.$$" "$ARG"
else
echo "$0: Error while deleting lines - no change to original file \<!--no-->"$ARG\<!--no-->"!" >&2
rm -f "$ARG.$$"
ERROR_OCCURED=1
fi
done
exit $ERROR_OCCURED
</font><hr></pre></blockquote>
Rückgabewerte sind 0 bei Erfolg, 1 bei Fehlern im Zeilenfiltern bei mind. einer Datei und 2 bei falschem Aufruf (ohne Parameter).
Das sed-Kommando kannst Du auch (falls Du Dich mit sed nicht wohlfühlst) durch ein
grep -v 'regulaerer-Ausdruck'
ersetzen, oder durch ein
fgrep -v 'fixe-Zeichenkette'
oder im Falle des Falles auch durch den awk, da kann man schön nach den Werten einzelner Felder in einer Zeile operieren.
Viel Spass dabei!
Jochen
Re: Per bash Zeilen aus einer Datei löschen ?
thx, klappt hervoragend mit grep ...