Hi, ich möchte mit sed oder awk (was halt einfacher geht) folgendes machen: Es ist z.B in Datei vorhanden: blabalblub Blablabla ROT lbalbalbal blabiblilliblibubu Es soll rauskommen: blabalblub <font color=red>Blablabla ROT lbalbalbal</font> blabiblilliblibubu Ich will also überall wo ROT steht auch den Text mit Tags vorne und hinten einklammern. Wie mache ich das mit sed bzw mit awk ? Ciao Tobias -- GMX - Die Kommunikationsplattform im Internet. http://www.gmx.net
Hallo Tobias, * Am 14.03.2002 um 15:00 Uhr schrieb Tobias Geis:
ich möchte mit sed oder awk (was halt einfacher geht) folgendes machen:
Es ist z.B in Datei vorhanden: blabalblub Blablabla ROT lbalbalbal blabiblilliblibubu
Es soll rauskommen: blabalblub <font color=red>Blablabla ROT lbalbalbal</font> blabiblilliblibubu
Ich will also überall wo ROT steht auch den Text mit Tags vorne und hinten einklammern.
wie wär's hiermit: sed 's/\(.*ROT.*\)/<font color=red>\1<\/font>/g' Jürgen -- Die letzten Worte eines Bergsteigers: "Waren gar nicht mal teuer, diese Karabinerhaken..." / Registered Linux-User #130804 http://counter.li.org \ \ Linux Stammtisch Bremerhaven http://linux.hs-bremerhaven.de /
Hallo, Am Donnerstag, 14. März 2002 15:13 schrieb Juergen Schwarting:
* Am 14.03.2002 um 15:00 Uhr schrieb Tobias Geis:
ich möchte mit sed oder awk (was halt einfacher geht) folgendes machen:
Es ist z.B in Datei vorhanden: blabalblub Blablabla ROT lbalbalbal blabiblilliblibubu
Es soll rauskommen: blabalblub <font color=red>Blablabla ROT lbalbalbal</font> blabiblilliblibubu
Ich will also überall wo ROT steht auch den Text mit Tags vorne und hinten einklammern.
wie wär's hiermit:
sed 's/\(.*ROT.*\)/<font color=red>\1<\/font>/g'
Jürgen
Effektiver und evtl. leichter lesbar wäre:
sed '/ROT/{s/^/<font color=red>/;s/$/<\/font>/;}'
Gruß
Bertram
--
Bertram Scharpf
Am Don, 14 Mär 2002 schrieb Bertram Scharpf:
Hallo,
Am Donnerstag, 14. März 2002 15:13 schrieb Juergen Schwarting:
* Am 14.03.2002 um 15:00 Uhr schrieb Tobias Geis:
ich möchte mit sed oder awk (was halt einfacher geht) folgendes machen:
Es ist z.B in Datei vorhanden: blabalblub Blablabla ROT lbalbalbal blabiblilliblibubu
Es soll rauskommen: blabalblub <font color=red>Blablabla ROT lbalbalbal</font> blabiblilliblibubu
Ich will also überall wo ROT steht auch den Text mit Tags vorne und hinten einklammern.
wie wär's hiermit:
sed 's/\(.*ROT.*\)/<font color=red>\1<\/font>/g'
Jürgen
Effektiver und evtl. leichter lesbar wäre:
sed '/ROT/{s/^/<font color=red>/;s/$/<\/font>/;}'
Hmm, mußt Du mir beides erklären. Warum effektiver? In Deinem Vorschlag gibt es zwei Ersetzungsoperationen, in obigem nur eine. Oder ist es so viel billiger, ^ und $ zu ersetzen. Aber die Suche nach ROT hast Du auch drin. Oder was sehe ich falsch? Warum besser lesbar? Ich finde Jürgens Vorschlag leichter lesbar, ist aber ne sehr persönliche Meinung und mag von anderen umgekehrt empfunden werden. 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
Hallo, Am Donnerstag, 14. März 2002 16:02 schrieb Christoph Maurer:
Am Don, 14 Mär 2002 schrieb Bertram Scharpf:
Effektiver und evtl. leichter lesbar wäre:
sed '/ROT/{s/^/<font color=red>/;s/$/<\/font>/;}'
Hmm, mußt Du mir beides erklären. Warum effektiver? In Deinem Vorschlag gibt es zwei Ersetzungsoperationen, in obigem nur eine. Oder ist es so viel billiger, ^ und $ zu ersetzen. Aber die Suche nach ROT hast Du auch drin. Oder was sehe ich falsch?
Warum besser lesbar? Ich finde Jürgens Vorschlag leichter lesbar, ist aber ne sehr persönliche Meinung und mag von anderen umgekehrt empfunden werden.
Hast ja recht; deshalb schreibe ich "evtl.". `sed'-Skripten sind
eigentlich nie leicht lesbar. Du kannst statt der Semikola auch
Zeilenumbrüche verwenden, dann wird's ein wenig erträglicher:
$ sed '
> /ROT{
> s/^/<font color=red>/
> s/$/<\/font>/
> }
>' myfile
"Effektiver" beziehe ich aufs Zwischenspeichern. Der Befehl mit \(
und \) speichert die Zeile an einem weiteren Platz, von wo sie
dann mit \1 wieder zurückgerufen wird. Bei den zwei Ersetzungen
zwischen { und } bleibt sie im Musterbereich und es wird nur vorne
und hinten etwas angehängt.
Wie aber `sed' intern arbeitet, weiß ich nicht, und ich bitte, nicht
für bare Münze zu nehmen, was ich mir da so zusammenreime.
Bertram
--
Bertram Scharpf
Moin Bertram, * Bertram Scharpf schrieb am 14 Mar 2002:
Am Donnerstag, 14. März 2002 16:02 schrieb Christoph Maurer:
Am Don, 14 Mär 2002 schrieb Bertram Scharpf:
Effektiver und evtl. leichter lesbar wäre:
sed '/ROT/{s/^/<font color=red>/;s/$/<\/font>/;}'
Hmm, mußt Du mir beides erklären. Warum effektiver? [...]
$ sed ' > /ROT{ > s/^/<font color=red>/ > s/$/<\/font>/ > } >' myfile
"Effektiver" beziehe ich aufs Zwischenspeichern. Der Befehl mit \( und \) speichert die Zeile an einem weiteren Platz, von wo sie dann mit \1 wieder zurückgerufen wird. Bei den zwei Ersetzungen zwischen { und } bleibt sie im Musterbereich und es wird nur vorne und hinten etwas angehängt.
^ und $ können in einer Zeile nur an einer Stelle auftauchen und sind deshalb sehr effizient zu suchen/ersetzen. Und ein einfacher Text "ROT" ist auch einfach zu suchen. Im ersten Beispiel steht zweimal .*, was aufwendig zu finden ist, wenn es nicht schnell paßt (und es paßt meistens nicht schnell). Und die Lookups \( \) sind auch ineffizient. Insofern hat Bertram schon recht. Gruß, Sebastian -- Do not meddle in the affairs of sysadmins, for they are subtle and quick to anger. Sebastian Helms - http://www.helms.sh - mailto:mail@helms.sh (PGP welcome) SuSE-Linux-Mailinglisten-FAQ: http://www.helms.sh/faq/
Hallo, noch eine Richtigstellung: Am Donnerstag, 14. März 2002 20:28 schrieb Sebastian Helms:
Moin Bertram,
* Bertram Scharpf schrieb am 14 Mar 2002:
Am Donnerstag, 14. März 2002 16:02 schrieb Christoph Maurer:
Am Don, 14 Mär 2002 schrieb Bertram Scharpf:
Effektiver und evtl. leichter lesbar wäre:
Warum effektiver?
"Effektiver" beziehe ich aufs [...] [...]Und die Lookups \( \) sind auch ineffizient.
Habe "effektiv" geschrieben; gemeint war und richtig gewesen wäre:
"effizient".
Bei Fremdwörtern bin ich halt noch nicht so genital wie bei
`sed'-Skripten.
Bertram
--
Bertram Scharpf
Moin Bertram, * Bertram Scharpf schrieb am 15 Mar 2002:
noch eine Richtigstellung:
Am Donnerstag, 14. März 2002 20:28 schrieb Sebastian Helms:
* Bertram Scharpf schrieb am 14 Mar 2002:
Am Donnerstag, 14. März 2002 16:02 schrieb Christoph Maurer:
Am Don, 14 Mär 2002 schrieb Bertram Scharpf:
Effektiver und evtl. leichter lesbar wäre:
Warum effektiver?
"Effektiver" beziehe ich aufs [...] [...]Und die Lookups \( \) sind auch ineffizient.
Habe "effektiv" geschrieben; gemeint war und richtig gewesen wäre: "effizient".
Hab ich so verstanden *g* Gruß, Sebastian -- Do not meddle in the affairs of sysadmins, for they are subtle and quick to anger. Sebastian Helms - http://www.helms.sh - mailto:mail@helms.sh (PGP welcome) SuSE-Linux-Mailinglisten-FAQ: http://www.helms.sh/faq/
participants (5)
-
Bertram Scharpf
-
Christoph Maurer
-
Juergen Schwarting
-
Sebastian Helms
-
Tobias Geis