cut -d" " -f2 mit sed ersetzen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

cut -d" " -f2 mit sed ersetzen

Beitrag von Voyager_MP » 12.09.2008 14:30:58

ich habe wieder nur was die busybox hergibt.

Code: Alles auswählen

echo bla 111122 143344 bla bla bal bal
               ^ delimiter
ich brauche nur die zahlen werte, leider ändert sich der delimiter " " von einem blank zu 2 oder auch mehr.
daher funktioniert cut nicht sauber.

thx
Gruß Michel

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von Spasswolf » 12.09.2008 15:46:54

Können im "bla bla" auch noch Ziffer vorkommen? Wenn nicht da geht's so ähnlich:

Code: Alles auswählen

$ echo baA baa 12114 355235 bla bla | sed 's/\([a-z,A-Z]*\)\([1-9]*\)/\2/g'
$  12114 355235  

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von Voyager_MP » 12.09.2008 15:58:45

leider kommen in bla bla jedes mal auch ziffern vor.
Gruß Michel

jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von jhr-online » 12.09.2008 16:57:21

Ich raff's nich... Du brauchst "die" Zahlenwerte, aber davor kann auch irgendwas anderes steht, unter Anderem auch Zahlen?
Geht das vielleicht auch präziser? :)

jhr
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von finupsen » 12.09.2008 17:13:18

moin,

awk wäre ist relativ egal wieviele space-delimiter es sind. Vielleicht wäre das ein ansatz:

Code: Alles auswählen

$ echo "bal bla 111  999 blubb bla" | sed 's/[^0-9|\ ]*//g' | awk '{print $1}'
111
$ echo "bal bla    111   999 blubb bla" | sed 's/[^0-9|\ ]*//g' | awk '{print $2}'
999
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von Spasswolf » 12.09.2008 17:14:56

Gibt's awk in der busybox?

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von Danielx » 12.09.2008 17:25:06

finupsen hat geschrieben:awk wäre ist relativ egal wieviele space-delimiter es sind.
Ist das cut nicht auch egal?

Bei mir funktioniert jedenfalls ein:

Code: Alles auswählen

echo bla         111122   143344   bla bla    bal bal | cut -d" " -f2,3
bzw. mit der BusyBox:

Code: Alles auswählen

busybox echo bla         111122   143344   bla bla    bal bal | cut -d" " -f2,3
liefert:
111122 143344
Oder funktioniert cut bei dir in der BusyBox anders?

Gruß,
Daniel
Zuletzt geändert von Danielx am 12.09.2008 17:30:33, insgesamt 1-mal geändert.

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von finupsen » 12.09.2008 17:26:57

Spasswolf hat geschrieben:Gibt's awk in der busybox?

Code: Alles auswählen

$ busybox --help
.....
Currently defined functions:
        [, [[, adjtimex, arping, ash, awk, .......
.....
ich denke schon ...
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Re: cut -d" " -f2 mit sed ersetzen

Beitrag von Voyager_MP » 15.09.2008 13:19:16

Code: Alles auswählen

until [ $firmwareupdatestatus = "done" ] >/dev/null 2>&1 || [ $firmwareupdatestatus = "error:" ] >/dev/null 2>&1
    do
        uploadstatus=`opsh -c firmware $slotname update show | grep ftp | sed -e 's/  */ /g' | cut -d" " -f1,2,3`
        firmwareupdatestatus=`opsh -c firmware $slotname update show | cut -d" " -f3`
        echo -en "\\rUpdating progress: $uploadstatus"
    done
So sieht der ganze code aus. Es geht jetzt dank "sed -e 's/ */ /g'"

Zur busybox, in meiner version ist awk nicht drin

Code: Alles auswählen

Falcon1_cas1_1:/mnt # busybox --help
BusyBox v0.61.pre (2008.04.04-09:49+0000) multi-call binary

Usage: busybox [function] [arguments]...
   or: [function] [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use, and BusyBox
        will act like whatever it was invoked as.

Currently defined functions:
        [, ash, basename, busybox, cat, chgrp, chmod, chown, chroot, clear,
        cp, crond, cut, date, dd, df, dirname, dmesg, du, echo, egrep,
        env, expr, false, fgrep, find, free, ftpget, ftpput, getty, grep,
        halt, head, hostid, hostname, id, ifconfig, inetd, init, ip, kill,
        killall, klogd, ln, logger, login, ls, mesg, mkdir, mknod, more,
        mount, mv, netstat, nslookup, od, pidof, ping, poweroff, ps, pwd,
        rdate, reboot, rm, rmdir, route, sed, sh, sleep, sort, stty, tail,
        tee, telnet, telnetd, test, tftp, time, top, touch, traceroute,
        true, tty, umount, uname, uniq, uptime, usleep, vi, watchdog,
        wc, wget, which, who, whoami, xargs, yes
echo bla 111122 143344 bla bla bal bal | cut -d" " -f2,3
geht auch wenn ich mit der busybox mache, aber nur wegen echo, nicht wenn die ausgabe von einem anderen programm kommt.
Gruß Michel

Antworten