Hi Hätte mal ne frabe: Suche und erseten mit regulären ausdrücken: Vorgang: Datei öffnen Nach einnem Suchbrgriff suchen und diesen ersetzen Datei schliesen und das alles in einem Aufruf . Danke MfG Dennis Lieig
On Wed, Dec 18, 2002 at 10:51:01AM +0100, Dennis Liebig wrote:
Suche und erseten mit regulären ausdrücken:
Vorgang:
Datei öffnen Nach einnem Suchbrgriff suchen und diesen ersetzen Datei schliesen
und das alles in einem Aufruf . Das geht mit sed. Wenn Dir die Manpage zu hart ist, empfehle ich den Griff zum O'Reilly Buch (eventuell reicht Dir auch die kurz & gut Fassung von Sed & Awk)
greetinXs, Michael Hilscher -- Would Mozart have been more productive if he had scribes to help him, a secretary and a CEO to lead his way? -- Linus Torvalds
* Dennis Liebig schrieb am 18.Dez.2002:
Hätte mal ne frabe:
Suche und erseten mit regulären ausdrücken:
Vorgang:
Datei öffnen Nach einnem Suchbrgriff suchen und diesen ersetzen Datei schliesen
und das alles in einem Aufruf .
man sed
Danke
Bitte. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Am Mit, 2002-12-18 um 12.02 schrieb Bernd Brodesser:
* Dennis Liebig schrieb am 18.Dez.2002:
Hätte mal ne frabe:
Suche und erseten mit regulären ausdrücken:
Vorgang:
Datei öffnen Nach einnem Suchbrgriff suchen und diesen ersetzen Datei schliesen
und das alles in einem Aufruf .
man sed
Oder mysql installieren. Da gibt es das praktische Tool "replace" $ cat "$EINE_DATEI" | replace "$EIN_STRING" "$EIN_ANDERER_STRING" > \ $"EINE_DATEI" -- Matthias Hentges [www.hentges.net] -> PGP + HTML are welcome ICQ: 97 26 97 4 -> No files, no URLs My OS: Debian Woody: Geek by Nature, Linux by Choice
Matthias Hentges wrote:
$ cat "$EINE_DATEI" | replace "$EIN_STRING" "$EIN_ANDERER_STRING" > \ $"EINE_DATEI"
Vorsicht mit dem Konstrukt: cat Datei | befehl > Datei Verkuerzt die Datei auf die Laenge des Buffers, bei grossen Dateien also ziemlich sicher ein Datenverlust. "$ ulimit -p 8 ", also ein Buffer von 4 Kilobyte. (vgl. "help ulimit"). Alles auf die Bash bezogen. Peter
Am Mit, 2002-12-18 um 12.25 schrieb Peter Wiersig:
Matthias Hentges wrote:
$ cat "$EINE_DATEI" | replace "$EIN_STRING" "$EIN_ANDERER_STRING" > \ $"EINE_DATEI"
Vorsicht mit dem Konstrukt: cat Datei | befehl > Datei
Verkuerzt die Datei auf die Laenge des Buffers, bei grossen Dateien also ziemlich sicher ein Datenverlust.
"$ ulimit -p 8 ", also ein Buffer von 4 Kilobyte. (vgl. "help ulimit").
Hoppala, das hatte ich garnicht bedacht. Und neugierig wie ich bin habe ich das mal ausprobiert: +mhentges@mhcln02:~ >cat /etc/* >~/test.txt +mhentges@mhcln02:~ >du test.txt 748k test.txt (habe mittig eine zeile rein gesetzt) +mhentges@mhcln02:~ >cat test.txt | replace "irgendein_sinnloser_text" "hallo" > test2.txt +mhentges@mhcln02:~ >diff -a test.txt test2.txt 7001c7001 < irgendein_sinnloser_text ---
hallo +mhentges@mhcln02:~ >
Hmm also bei mir funktioniert das. Oder mache ich was falsch? Mit 750kb sollte test.txt doch gross genug sein oder? -- Matthias Hentges Cologne / Germany [www.hentges.net] -> PGP welcome, HTML tolerated ICQ: 97 26 97 4 -> No files, no URL's My OS: Debian Woody: Geek by Nature, Linux by Choice
* Am Mit, 18 Dez 2002 schrieb Matthias Hentges:
Am Mit, 2002-12-18 um 12.25 schrieb Peter Wiersig:
Matthias Hentges wrote:
$ cat "$EINE_DATEI" | replace "$EIN_STRING" "$EIN_ANDERER_STRING" > \ $"EINE_DATEI"
Vorsicht mit dem Konstrukt: cat Datei | befehl > Datei
Verkuerzt die Datei auf die Laenge des Buffers, bei grossen Dateien also ziemlich sicher ein Datenverlust.
"$ ulimit -p 8 ", also ein Buffer von 4 Kilobyte. (vgl. "help ulimit").
Hoppala, das hatte ich garnicht bedacht. Und neugierig wie ich bin habe ich das mal ausprobiert:
+mhentges@mhcln02:~ >cat /etc/* >~/test.txt
+mhentges@mhcln02:~ >du test.txt 748k test.txt
(habe mittig eine zeile rein gesetzt)
+mhentges@mhcln02:~ >cat test.txt | replace "irgendein_sinnloser_text" "hallo" > test2.txt
+mhentges@mhcln02:~ >diff -a test.txt test2.txt 7001c7001 < irgendein_sinnloser_text ---
hallo +mhentges@mhcln02:~ >
Hmm also bei mir funktioniert das. Oder mache ich was falsch? Mit 750kb sollte test.txt doch gross genug sein oder?
Wenn Du eine andere Datei als Eingabepuffer verwendest wie zur Ausgabe, kann ja auch nichts schief gehen. Das Problem tritt auf bei cat datei | sed -e 's/irgendwas/wasanderes/' > datei Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Am Mit, 2002-12-18 um 13.11 schrieb Christoph Maurer:
* Am Mit, 18 Dez 2002 schrieb Matthias Hentges:
Am Mit, 2002-12-18 um 12.25 schrieb Peter Wiersig:
Matthias Hentges wrote:
Hmm also bei mir funktioniert das. Oder mache ich was falsch? Mit 750kb sollte test.txt doch gross genug sein oder?
Wenn Du eine andere Datei als Eingabepuffer verwendest wie zur Ausgabe, kann ja auch nichts schief gehen.
Das Problem tritt auf bei
cat datei | sed -e 's/irgendwas/wasanderes/' > datei
Achso, stimmt dann kommt wirklich nur eine 8k grosse Datei an. Danke für die Aufklärung :) -- Matthias Hentges Cologne / Germany [www.hentges.net] -> PGP welcome, HTML tolerated ICQ: 97 26 97 4 -> No files, no URL's My OS: Debian Woody: Geek by Nature, Linux by Choice
Matthias Hentges wrote:
Am Mit, 2002-12-18 um 12.25 schrieb Peter Wiersig:
[...] Vorsicht mit dem Konstrukt: cat Datei | befehl > Datei
Verkuerzt die Datei auf die Laenge des Buffers, bei grossen Dateien also ziemlich sicher ein Datenverlust.
Hoppala, das hatte ich garnicht bedacht. Und neugierig wie ich bin habe ich das mal ausprobiert: [...] +mhentges@mhcln02:~ >cat test.txt | replace "irgendein_sinnloser_text" "hallo" > test2.txt
Witzbold! ;-) Du schreibst natuerlich in eine andere Datei, da wird das Phaenomen nicht auftreten. Fuehre Dein Beispiel mal erneut durch und verwende "... > test.txt", dann wirst Du se- hen, was passiert: thertw@gpiprs4 [thertw] ll test.txt -rw-r--r-- 1 thertw reflth 2491622 Dez 18 13:10 test.txt thertw@gpiprs4 [thertw] cat test.txt | sed s/a/e/g > test.txt thertw@gpiprs4 [thertw] ll test.txt -rw-r--r-- 1 thertw reflth 8192 Dez 18 13:11 test.txt Das nenne ich doch schon gehoerigen Datenverlust ;-) Gruesse, Thomson -- Thomas Hertweck, Geophysicist Geophysical Institute, Karlsruhe University (TH)
On Mit, 18 Dez 2002 at 13:04 (+0100), Matthias Hentges wrote:
Am Mit, 2002-12-18 um 12.25 schrieb Peter Wiersig:
Matthias Hentges wrote:
$ cat "$EINE_DATEI" | replace "$EIN_STRING" "$EIN_ANDERER_STRING" > \ $"EINE_DATEI"
Vorsicht mit dem Konstrukt: cat Datei | befehl > Datei
Verkuerzt die Datei auf die Laenge des Buffers, bei grossen Dateien also ziemlich sicher ein Datenverlust.
"$ ulimit -p 8 ", also ein Buffer von 4 Kilobyte. (vgl. "help ulimit").
Hoppala, das hatte ich garnicht bedacht. Und neugierig wie ich bin habe ich das mal ausprobiert:
+mhentges@mhcln02:~ >cat /etc/* >~/test.txt
+mhentges@mhcln02:~ >du test.txt 748k test.txt
(habe mittig eine zeile rein gesetzt)
+mhentges@mhcln02:~ >cat test.txt | replace "irgendein_sinnloser_text" "hallo" > test2.txt
+mhentges@mhcln02:~ >diff -a test.txt test2.txt 7001c7001 < irgendein_sinnloser_text ---
hallo +mhentges@mhcln02:~ >
Hmm also bei mir funktioniert das. Oder mache ich was falsch? Mit 750kb sollte test.txt doch gross genug sein oder?
Du hast nicht das getestet, was Peter meinte und was Du in Deiner ersten Mail beschrieben hast. Du hast ja eine neue Datei test2.txt erzeugt, nicht die alte test.txt überschrieben. Jan
* Matthias Hentges schrieb am 18.Dez.2002:
+mhentges@mhcln02:~ >cat test.txt | replace "irgendein_sinnloser_text" "hallo" > test2.txt
test.txt != test2.txt daher gibt es auch keine Probleme. Da kann die Datei so lang sein wie sie will, bzw. bis es an anderer Stelle klemmt. Das Problem gibt es nur, wenn es sich um ein und die selbe Datei handelt. Sie wird gelesen, aber nur Blockweise. Der erste Block wird in die Pipe geschoben, cat ist sehr schnell. Dann wird gewartet, bis die Pipe frei ist. Während dessen wird aus der Pipe gelesen und verarbeitet. Dann wird das Ergebnis in die Datei geschrieben, und diese damit überschrieben. Alles was noch nicht in die Pipe geschaufelt wurde ist dann verloren. Dieses Problem hast Du natürlich nicht, wenn Du in eine andere Datei schreibst. Dann wird die ursprüngliche Datei selbstverständlich nicht überschrieben. Bernd -- Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet. Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet. Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12
* Matthias Hentges schrieb am 18.Dez.2002:
Am Mit, 2002-12-18 um 12.02 schrieb Bernd Brodesser:
* Dennis Liebig schrieb am 18.Dez.2002:
man sed
Oder mysql installieren. Da gibt es das praktische Tool "replace"
Welchen Vorteil hat replace, der sed nicht hat? Ob ich nun replace $EIN_STRING $EIN_ANDERER_STRING oder aber sed s/$EIN_STRING/$EIN_ANDERER_STRING/g sage, wo ist da ein Unterschied? Nur sed hat sehr viel mehr Möglichkeiten. Und es wurde ausdrücklich nach regexp gefragt.
$ cat "$EINE_DATEI" | replace "$EIN_STRING" "$EIN_ANDERER_STRING" > \ $"EINE_DATEI"
Und das funktioniert weder bei replace noch bei sed. Die Datei, aus der gelesen wird, soll eine andere sein, als die, in der geschrieben wird, sonst kommt es zu Datenverlust. Da die Pipe etwas Zwichenspeichert, fällt es bei kleien Dateien nicht auf. Bernd -- Bitte die Etikette beachten: http://www.suse-etikette.de.vu/etikette.html Bitte Realnamen angeben, kein Vollquoting, kein Html, PGP oder Visitenkarten benutzen. Signatur mit "-- " abtrennen, bei Antworten "Re: " voranstellen, sonst nichts. |Zufallssignatur 4
Hi,
From: "Dennis Liebig"
Suche und erseten mit regulären ausdrücken:
Vorgang:
Datei öffnen Nach einnem Suchbrgriff suchen und diesen ersetzen Datei schliesen
und das alles in einem Aufruf .
perl -p -i.bak -e 's/_ALT_/_NEU_/g' datei.txt man awk & sed, perldoc, google mal nach perl-einzeiler ... bye Andre
participants (9)
-
Andre Heine
-
B.Brodesser@t-online.de
-
Christoph Maurer
-
Dennis Liebig
-
Jan.Trippler@t-online.de
-
Matthias Hentges
-
Michael Hilscher
-
Peter Wiersig
-
Thomas Hertweck