Shellprogrammierung

Florian Lohoff flo at rfc822.org
Sun Jun 2 20:06:02 CEST 2002


On Sun, Jun 02, 2002 at 07:03:11PM +0200, Manfred Wuttke wrote:
> Hallo,
> ich bin neu in der Liste, komme aus Steinhagen, bin relativ jung, was Linux 
> angeht, sonst aber schon etwas aelter.
> Problem: Ich moechte aus in einer Variablen gespeicherten Zeile/String wie 
> z.B. VAR="hier <dfn>testen</dfn> wir" 
> mit dem Befehl cut das Wort "testen" herausschneiden. Gibt es einen in 

Um sed wirst du wohl kaum herumkommen - Zumindest um die regex nicht 
(man regex).

In eta so sollte das gehen

VAR="hier <dfn>testen</dfn> wir"

NEWVAR=`echo $VAR | sed -e 's/^.*\<dfn\>//' -e 's/\<\/dfn\>.*$//'`

Das ganze macht nicht ganz das was du willst aber es sollte so
funktionieren. Und zwar wird vom zeilenanfang (^) beliebige zeichen
mit beliebiger menge (.*) geloescht bis zum pattern <dfn> (\<dfn\>).
Das selbe dann von </dfn> bis zum ende der zeile ($).

Problem - Das funktioniert nur solange nur eine dieser patterns pro
zeile auftaucht.

Effektiver mit perl

cat file |\
	perl -ne '
		while(s/\<dfn\>(.*)\</dfn\>//) {
			print($1);
		}
	'

Das letzte geht zeilenweise die datei durch und prozessiert in jeder
zeile <dfn>...</dfn> solange es vorkommt. In perl haben die regex die
angewohnheit das die pattern group () in die entsprechenden vars $1 .. $n
gepackt werden. D.h. matched die eingabezeile wird der pattern geloescht
(Durch // nichts ersetzt) und in der schleife die solange patterns da
sind weitermacht dann ausgegeben (Ohne newline).

Hope it helps ...

Flo
-- 
Florian Lohoff                  flo at rfc822.org             +49-5201-669912
                        Heisenberg may have been here.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 232 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20020602/bbe65564/attachment.sig>


More information about the Linux mailing list