PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Bash] Text in Datei suchen mit Kondition



Zettt
12-07-2007, 13:07
Hallo

Ich hoffe das ist keine schwere Frage ;)

Ich habe meine ToDo Liste in Form einer Text Datei rumliegen. Mithilfe meines Text Editors habe ich mir ein Snippet geschrieben, welches die aktuelle Zeile loescht und in die sogenannte "done.txt" verschiebt. Ist klar warum oder? :-D

Nun dachte ich mir zur Verwaltung waere es ganz schoen, wenn mir an jedem neuen Tag einmal das Datum mit in diese Datei geschrieben wird per

date "+DATE: %Y.%m.%d >> done.txt
Wuerde ich das Kommando immer mit ausfuehren, haette ich bei jedem mal aufrufen des Scripts erneut einmal das Datum stehen. Ist unschoen.
if komm mir zuhilfe dachte ich. Nur weiss ich nicht wieman das loesen koennte. Wisst ihr da Rat?

Danke
Zettt

PS: Was ich auch noch raus habe. Ich lasse mir die Zeile per

echo "Text der aktuellen Zeile" | echo ""
loeschen. Unschoen, ist aber nicht sooo schlimm, ist das mir die Zeile nicht gleichzeitig auch geloescht wird. Sondern eben nur geleert wird. :eek: Schrecklich...

tschloss
12-07-2007, 13:23
QUark, habe mich verlesen: Habe gelesen "wie ich das löschen könnte" statt "lösen" ;)
Aber vielleicht schreibst DU per "Cron" einmal pro Tag deine Datumszeile in die Datei.
http://www.selflinux.org/selflinux/html/cron01.html


mit grep kannst du bestimmte Zeilen einer Datei filtern, eine Option "-v" schaltet den Modus um auf "alle Zeilen außer...".
Vielleicht ist es das, was du suchst.
(http://www.linuxfibel.de/grep.htm)

Zettt
12-07-2007, 14:42
Oh Nein stimmt ja. grep kann das!

Aber mein Problem ist vor allem auch, dass ich jetzt nicht mehr weiter komme. Das ist sozusagen mein zweites Bash Script ueberhaupt.


Cron ist nicht so gut, da mein Rechner nicht den ganzen Tag an ist. Deswegen ist es schlecht den Zeitpunkt fuer cron festzusetzen. Klar gibt es eine Zeit zu der ich aufstehe. Aber was ist wenn ich verschlafe oder mal frueher aufstehe (und dann eben schon was erledigt habe)?

BLUESCREEN3D
12-07-2007, 19:28
Du kannst am Anfang des Scriptes mit grep prüfen, ob die Zeile mit dem aktuellen Datum schon in done.txt steht:


today=$(date '+DATE: %Y.%m.%d')

if [ $(grep -c "^$today$" done.txt) -eq 0 ]; then
echo "$today" >> done.txt;
fi

Wie du aus einer mehrzeiligen Datei nur mit deinem doppelten echo was löschen kannst, ist mir unklar.

Zettt
12-07-2007, 21:27
Das ist ja geil.

Das wusste ich nicht, dass man das Kommando selbst einfach per "Variable" in die if Konstruktion mit rein nehmen kann. Ist ja schick.

Wo gibts mehr solche Infos? Habe schon nach (Video) Tutorials gesucht leider nichts anstaendiges gefunden. Aber selbst falls mir das nicht mehr beantwortet werden sollte. Das Problem ist geloest!!!

BLUESCREEN3D
12-07-2007, 23:18
Wo gibts mehr solche Infos?
Spontan fällt mir das ein: http://tldp.org/LDP/abs/html/

jan61
18-07-2007, 21:10
Du kannst am Anfang des Scriptes mit grep prüfen, ob die Zeile mit dem aktuellen Datum schon in done.txt steht:


today=$(date '+DATE: %Y.%m.%d')

if [ $(grep -c "^$today$" done.txt) -eq 0 ]; then
echo "$today" >> done.txt;
fiWie du aus einer mehrzeiligen Datei nur mit deinem doppelten echo was löschen kannst, ist mir unklar.

Hm. Dass grep selbst einen passenden Returncode liefern kann, scheint sich noch nicht rumgesprochen zu haben?

grep -q "^$today$" done.txt || echo "$today" >> done.txtJan