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