Bash-Script > Wort finden und komplette Zeile löschen.
Bash-Script > Wort finden und komplette Zeile löschen.
Hallo!
Hab zwar schon rumgeschaut und bin mit meinem Script auch schnell weiter gekommen, aber mir fehlt noch ein Detail.
Und zwar kann es vorkommen, dass in einer Datei was doppelt eingetragen wird und um das zu verhindern möchte vorher immer alles löschen und es dann bei ausführen des Scripts neu eintragen.
Also nicht alles in der Datei sonder halt nur diese Zeilen wo entweder doppelt sind oder wo ich weiss dass diese doppelt eingetragen sein könnten und auch weiss was dann in der Zeile steht und dies somit suchen könnte.
Das heisst aber, dass ich es erstmal was suchen muss, was in der Zeile steht und dann die Komplette Zeile löschen muss!
Gibts da ein Beispielscript oder hat jemand eine Idee für die Syntax.
Wusste jetzt auch nicht wie ich es besser erklären kann, ich hoffe es kann jemand was damit anfangen.
Danke!
Hab zwar schon rumgeschaut und bin mit meinem Script auch schnell weiter gekommen, aber mir fehlt noch ein Detail.
Und zwar kann es vorkommen, dass in einer Datei was doppelt eingetragen wird und um das zu verhindern möchte vorher immer alles löschen und es dann bei ausführen des Scripts neu eintragen.
Also nicht alles in der Datei sonder halt nur diese Zeilen wo entweder doppelt sind oder wo ich weiss dass diese doppelt eingetragen sein könnten und auch weiss was dann in der Zeile steht und dies somit suchen könnte.
Das heisst aber, dass ich es erstmal was suchen muss, was in der Zeile steht und dann die Komplette Zeile löschen muss!
Gibts da ein Beispielscript oder hat jemand eine Idee für die Syntax.
Wusste jetzt auch nicht wie ich es besser erklären kann, ich hoffe es kann jemand was damit anfangen.
Danke!
Hi,
sed ist eine prima Loesung, wenn es allerdings nicht auf die Reihenfolge der Zeilen in der "aussortierten" Datei ankommt, koenntest du auch verwenden.
sed ist eine prima Loesung, wenn es allerdings nicht auf die Reihenfolge der Zeilen in der "aussortierten" Datei ankommt, koenntest du auch
Code: Alles auswählen
sort -u <EINGABEDATEI >AUSGABEDATEI
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Hi,
sed ist eine prima Loesung, wenn es allerdings nicht auf die Reihenfolge der Zeilen in der "aussortierten" Datei ankommt, koenntest du auch verwenden.
sed ist eine prima Loesung, wenn es allerdings nicht auf die Reihenfolge der Zeilen in der "aussortierten" Datei ankommt, koenntest du auch
Code: Alles auswählen
sort -u <EINGABEDATEI >AUSGABEDATEI
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Du willst also alle Zeilen einer Datei haben, die einen bestimmten String *nicht* enthalten? Nichts leichter als das:
Patrick
Code: Alles auswählen
grep -v STRING Datei.txt
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
hab nochmal nachgeschaut und das ganze jetzt folgendermassen gelöst:
soweit ich es überblicken und ausprobieren konnte, macht es genau das was ich wollte.
Code: Alles auswählen
sed -e '/T1/d' /etc/iproute2/rt_tables > /etc/iproute2/rt_tables.temp
sed -e '/T2/d' /etc/iproute2/rt_tables.temp > /etc/iproute2/rt_tables.temp2
cp /etc/iproute2/rt_tables.temp2 /etc/iproute2/rt_tables
soweit ich es überblicken und ausprobieren konnte, macht es genau das was ich wollte.
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
einfach statt
datei > datei.tmp
ein
-i datei
machen. Das wäre also so:
noch netter wäre allerdings
das [12] matcht 1 oder 2
MfG Peschmä
datei > datei.tmp
ein
-i datei
machen. Das wäre also so:
Code: Alles auswählen
sed -e '/T1/d' -i /etc/iproute2/rt_tables
sed -e '/T2/d' -i /etc/iproute2/rt_tables
Code: Alles auswählen
sed -e '/T[12]/d' -i /etc/iproute2/rt_tables
MfG Peschmä
Hi,
joh, da ist'n Syntax Fehler:
joh, da ist'n Syntax Fehler:
Um den Ausdruck herum fehlen Hochkommas, alsopeschmae hat geschrieben:sed s/.*such.*// <datei.txt
sed 's/.*such.*//' <datei.txt
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
die sind aber nicht nötig
Ach ja, und datei.txt sieht so aus:
MfG Peschmä
Code: Alles auswählen
peschmae@satellite:~$ sed s/.*such.*// <datei.txt | md5sum
6515c621dac69beff442141ebbd2c2fa -
peschmae@satellite:~$ sed 's/.*such.*//' <datei.txt | md5sum
6515c621dac69beff442141ebbd2c2fa -
Code: Alles auswählen
peschmae@satellite:~$ cat datei.txt
öalsdjflasd
falösdfjölakjsdf
asklöfjlasdsuch
asdöfljasldf
asdökfjsuchasödf
Hi,
wird der * denn dann nicht von der Shell expandiert? Noetig sind sie auf jeden Fall, wenn du z.B. nach dem Zeilenende, also $ such'st, daher habe ich es mir angewoehnt die Hochkomma einfach immer zu verwenden, dann muss ich mir nicht ueberlegen wann ich sie brauche und wann nicht.
wird der * denn dann nicht von der Shell expandiert? Noetig sind sie auf jeden Fall, wenn du z.B. nach dem Zeilenende, also $ such'st, daher habe ich es mir angewoehnt die Hochkomma einfach immer zu verwenden, dann muss ich mir nicht ueberlegen wann ich sie brauche und wann nicht.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Nicht, wennroli hat geschrieben:wird der * denn dann nicht von der Shell expandiert?
- Es keine Datei gibt, auf die das Muster passt
- es in einfachen Anführungszeichen steht: solche Strings werden allgemein von der Shell in Ruhe gelassen.
Code: Alles auswählen
sed -e '...'
Code: Alles auswählen
sed -e "..."
-
- Beiträge: 520
- Registriert: 12.06.2003 23:18:50
- Wohnort: Siegburg
Du kannst bei sed auch mehrere Ausdrücke angeben. Damit sparst du dir die Zwischenschritte:fte213 hat geschrieben:hab nochmal nachgeschaut und das ganze jetzt folgendermassen gelöst:
Code: Alles auswählen
sed -e '/T1/d' /etc/iproute2/rt_tables > /etc/iproute2/rt_tables.temp sed -e '/T2/d' /etc/iproute2/rt_tables.temp > /etc/iproute2/rt_tables.temp2 cp /etc/iproute2/rt_tables.temp2 /etc/iproute2/rt_tables
Code: Alles auswählen
sed -e '/T1/d' -e '/T2/d' /etc/iproute2/rt_tables > /etc/iproute2/rt_tables.temp
Code: Alles auswählen
grep -v -e T1 -e T2 /etc/iproute2/rt_tables > /etc/iproute2/rt_tables.temp
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Ich habe es zwar ca. 10 Posts weiter oben schon geschrieben, aber was ist mit "grep -v wort datei" nicht in Ordnung? "grep -v" macht genau das umgekehrte von grep: es gibt alle Zeilen aus, die den String "wort" nicht enthalten...
Patrick
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
Gar nix ist nicht in Ordnung.
Aber wenn einer anfängt meine funktionierende Lösung schlechtzumachen und unüberprüfte Behauptungen zuv erbreiten werde ich ihn doch wohl korrigieren dürfen
Ich schäm mich übrigens immer noch dafür, dass ich immer gleich zu sed greife und Grep so sträflich vernachlässige
MfG Peschmä
Aber wenn einer anfängt meine funktionierende Lösung schlechtzumachen und unüberprüfte Behauptungen zuv erbreiten werde ich ihn doch wohl korrigieren dürfen
Ich schäm mich übrigens immer noch dafür, dass ich immer gleich zu sed greife und Grep so sträflich vernachlässige
MfG Peschmä
Hi,
das war ja auch der Grund warum ich in meinem ersten Posting auf die "fehlenden" Hochkommata hingewiesen habe. Ich verwende sie halt immer, bis jetzt gabe es noch keinen Grund sie nicht zu verwenden.
das war ja auch der Grund warum ich in meinem ersten Posting auf die "fehlenden" Hochkommata hingewiesen habe. Ich verwende sie halt immer, bis jetzt gabe es noch keinen Grund sie nicht zu verwenden.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Fast perfekt, aber ...
Mit grep funktioniert es prima!pdreker hat geschrieben:Ich habe es zwar ca. 10 Posts weiter oben schon geschrieben, aber was ist mit "grep -v wort datei" nicht in Ordnung? "grep -v" macht genau das umgekehrte von grep: es gibt alle Zeilen aus, die den String "wort" nicht enthalten...
Patrick
Allerdings reicht ein
Code: Alles auswählen
grep -v
Möchte man nun nur die Zeile nicht dargestellt bekommen, die 100% 'wort' enthält und nicht 'wort20', so sollte man folgenden Befehl nutzen:
Code: Alles auswählen
grep -v wort -w /tmp/datei.txt