Am Fri, 31 Oct 2014 15:25:13 +0100
schrieb "Dr. Juergen Vollmer"
Am Freitag 31 Oktober 2014, 13:04:04 schrieben Sie:
Am Fri, 31 Oct 2014 12:29:48 +0100 schrieb Dr. Jürgen Vollmer
: Hallo Al
Am Donnerstag, 30. Oktober 2014, 22:57:52 schrieb Аl Воgnеr:
Gegeben ist beispielhaft
Textdatei="irgendwas.txt"
Darin befindet sich zB ------------------------ bla blub worte keyword1 bla suchkriterium 'wort1:wort2:wort3:etc' xx blu blo worte keyword1 bla suchkriterium 'wort1:wort2:wort3:etc' yy worte keyword1 bla suchkriterium 'wort1:wort2:wort3:etc' zz was anderes etc ------------------------
Nun geht es darum in einem Bash-Script den Teil zwischen '' zu ersetzen, wenn in der Zeile das Suchkriterium gefunden wird, wobei das zu Ersetzende in einer Variable gespeichert ist. Der Aufruf des Textes erfolgt über die Variable Textdatei.
In diesem Fall würde also in folgenden Zeilen das zu ersetzen sein, das sich zwischen den '' befindet, also 'wort1:wort2:wort3:etc'
worte keyword1 bla suchkriterium 'wort1:wort2:wort3:etc' xx worte keyword1 bla suchkriterium 'wort1:wort2:wort3:etc' yy worte keyword1 bla suchkriterium 'wort1:wort2:wort3:etc' zz
und zwar durch
neu="wort4:wort5:etc"
Gegeben ist, dass nach "suchkriterium" immer ein Text folgt, der zwischen '' steht und der zu ersetzen ist. Die Länge des Textes zwischen den '' ist meistens konstant, aber ich denke das ist nicht so wichtig.
Wie macht man das am besten? Mit sed, awk oder?
Αl
sed -e "/suchkriterium/ s/'wort1:wort2:wort3:etc'/'wort4:wort5:etc'/" $Textdatei
Siehe auch http://de.wikipedia.org/wiki/Sed_%28Unix%29
Danke, aber zum einen bitte als Variable (und da habe ich bei sed immer Probleme) und zum anderen bin ich mir nicht sicher, ob es das tut, das ich möchte. Ich weiß ja nicht, was der zu suchende Teil ist, sondern weiß nur, dass es der Teil nach dem Suchkriterium ist auf das ' folgt und mit ' endet.
Αl
---- #!/bin/sh datei=was-auch-immer.txt suche=suchkriterium neu=wort4:wort5:etc sed -e "/$suche/ s/'.*'/'$neu'/" $datei ----
ok, es mag Probleme geben, wenn suchkriterium selbst ein ' oder andere "kritische" Zeichen wie $ oder " enthält. Dann muss man das ganze aber eben noch escapen. Gleiches für Ersetztext "$neu"
Hallo Jürgen, das Suchkriterium sollte normalerweise kein ' oder $ enthalten und fängt meistens mit einem @ an. Leider macht das Script noch nicht das, was ich mir vorstelle. Es ersetzt den Teil zwischen den '', der das _1._ Mal vorkommt und nicht _nach_ dem Suchkriterium. Tatsächlich ist es in der Zeile meistens die 3. Zeichenkette mit ''. Außerdem wird nur in der 1. Zeile ersetzt, wo das Suchkriterium gefunden wird und nicht in allen Zeilen, wo das Suchkriterium vorkommt. @David, der awk-Befehl ist wirklich gruselig und ich verstehe ihn noch nicht. Aber ich probiere damit rum. Ich gebe "suchkriterium" als Text ein, aber wenn es geht sollte alles in Variablen gepackt werden, das möglich ist, also so wie es Jürgen gemacht hat. datei=was-auch-immer.txt suche=suchkriterium neu=wort4:wort5:etc Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org