PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zahl in einem String hochzählen



maximus
12-12-2008, 11:30
Hi @all,

habe folgendes Problem:

ich muss innerhalb eines scriptes einen string aus einer datei auslesen den ich vorher noch um den wert 1 verändern muss....

inhalt der datei:

alter user system identified by bla_bal10;

die 10 muss zur 11 werden und anschl. benötige ich das pw im ausführenden Script.....

kann mir da jemand helfen ?

undefined
12-12-2008, 14:49
Mit sed oder awk extrahieren, mit expr $val +1 Inkrementieren und wieder zusammen fügen.
Geht aber auch alles mit awk

jan61
13-12-2008, 20:30
Moin,

da gibts viele Varianten, hier eine lustige mit sed:

echo "alter user system identified by bla_bal10;" | \
sed -r 's/.+ ([^ ]+);$/\1/;s/([^0-9]+)([0-9]+)/echo \1`expr \2 + 1`/' | sh
Das erste sed-Kommando "s/.+ ([^ ]+);$/\1/" entfernt alles bis zum letzten Leerzeichen aus der Eingabe, das Kommando "s/([^0-9]+)([0-9]+)/echo \1`expr \2 + 1`/" ersetzt das ursprüngliche Passwort durch den Text "echo bla_bal`expr 10 + 1`", dann wird alles einer Shell zur Ausführung vorgeworfen, raus kommt das neue Passwort. Wenn Du das alles in einer Variablen brauchst:

PASS=`echo "alter user system identified by bla_bal10;" | \
sed -r 's/.+ ([^ ]+);$/\1/;s/([^0-9]+)([0-9]+)/echo \1\`expr \2 + 1\`/' | sh`
Hier müssen die internen Backticks entwertet werden, damit die äußere Shell nichts davon mitkriegt.

Und hier noch eine Variante mit awk:

echo "alter user system identified by bla_bal10;" | awk ' {
pass1=gensub(/([^0-9]+)[0-9]+;/, "\\1", "1", $NF);
pass2=gensub(/[^0-9]+([0-9]+);/, "\\1", "1", $NF);
pass2++;
print pass1 pass2; }'Jan

msi
14-12-2008, 15:11
da sed und awk veraltet sind hier eine modernere und einfacherere variante:



echo 'alter user system identified by bla_bal10;' | \
perl -npe '/(.*?)([0-9]+)/; $_=$1.($2+1)'

jan61
17-12-2008, 23:11
Moin,


da sed und awk veraltet sind

wow - man erfährt jeden Tag was Neues! Du kannst Dir nicht vorstellen, dass es Systeme gibt, auf denen kein Perl verfügbar ist?

Jan

undefined
18-12-2008, 13:26
Moin,



wow - man erfährt jeden Tag was Neues! Du kannst Dir nicht vorstellen, dass es Systeme gibt, auf denen kein Perl verfügbar ist?

Jan
Mach dir nicht daraus. Ich habe zu dem Zitat nur laut gelacht :D

msi
21-12-2008, 20:42
Mach dir nicht daraus. Ich habe zu dem Zitat nur laut gelacht :D

dafür wars auch gedacht ;)