bash, Länge einer Zeichenkette (gelöst)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
guennid

bash, Länge einer Zeichenkette (gelöst)

Beitrag von guennid » 27.03.2011 15:07:00

bash:
Ich habe eine Zeichenkette unbekannter Länge in einer Variablen. Möchte mir jemand sagen, wie ich die Anzahl der Zeichen in dieser Zeichenkette feststelle?

Grüße, Günther
Zuletzt geändert von guennid am 28.03.2011 21:54:22, insgesamt 1-mal geändert.

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: bash, Länge einer Zeichenkette

Beitrag von syssi » 27.03.2011 15:21:00

echo $FOO | wc -c

Code: Alles auswählen

$ FOO="bar"
$ echo $FOO | wc -c
4
$

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: bash, Länge einer Zeichenkette

Beitrag von GoKi » 27.03.2011 15:42:19

Code: Alles auswählen

echo `expr length $FOO`
MfG GoKi
:wq

guennid

Re: bash, Länge einer Zeichenkette

Beitrag von guennid » 27.03.2011 15:54:09

Danke sehr!

GoKis Methode habe ich noch nicht probiert.
Bei syssis Methode frage ich mich, wie gezählt wird. Selbst gezählt habe ich 23 Zeichen (einschließlich Leerzeichen). wc -c behauptet, es seien 24. Folglich kann der Unterschied nicht daran liegen, dass ich mit mit 1 statt mit 0 zu zählen begonnen habe.

Grüße, Günther

Benutzeravatar
TRex
Moderator
Beiträge: 8336
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: bash, Länge einer Zeichenkette

Beitrag von TRex » 27.03.2011 16:05:33

Weil echo standardmäßig ein '\n' anhängt (Zeilenumbruch). Wenn du das nicht willst, übergib noch den Parameter -n an echo.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

guennid

Re: bash, Länge einer Zeichenkette

Beitrag von guennid » 27.03.2011 16:14:30

GoKis Methode funktioniert hier nicht.

@TRex2003
Danke für die Erklärung!

Das echo interessiert weniger. Ich schaffe es jetzt nicht, die Ausgabe von $FOO | wc -c wieder in einer neuen Variablen unterzubringen.

Grüße, Günther

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: bash, Länge einer Zeichenkette

Beitrag von syssi » 27.03.2011 16:17:16

Code: Alles auswählen

COUNT=$(echo $FOO | wc -c)
echo $COUNT

guennid

Re: bash, Länge einer Zeichenkette

Beitrag von guennid » 27.03.2011 16:37:31

Danke sehr, auch an yeti :wink: Hab's jetzt hinbekommen. :THX:

Geht's auch ohne den ständigen Umweg über echo?

Und Pascal ist deutlich angenehmer. :mrgreen:

Grüße, Günther

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: bash, Länge einer Zeichenkette

Beitrag von syssi » 27.03.2011 16:49:06

Dann solltest du GoKi's Version bevorzugen:

Code: Alles auswählen

COUNT=$(expr length $FOO)

guennid

Re: bash, Länge einer Zeichenkette

Beitrag von guennid » 27.03.2011 17:28:18

In GoKis Version steckt irgendwo ein Sytaxfehler. Hiere funktioniert weder seine ursprüngliche Version noch die zuletzt von dir angeführte:

Code: Alles auswählen

expr: Syntaxfehler

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: bash, Länge einer Zeichenkette

Beitrag von GoKi » 27.03.2011 17:47:50

Wenn ein Leerzeichen enthalten ist, dann musst Du die Variable in "" einschließen.

Code: Alles auswählen

$ FOO="foo bar"
$ expr length "$FOO"
7
MfG GoKi
:wq

guennid

Re: bash, Länge einer Zeichenkette

Beitrag von guennid » 27.03.2011 21:11:16

Danke sehr!

Und jetzt mal zum praktischen Nährwert meiner Fragen:
acpi -b liefert folgende Ausgabe:

Code: Alles auswählen

Battery 0: Unknown, 97%
Mit

Code: Alles auswählen

echo $(acpi -b | grep "Battery 0" | cut -c21-23)
könnte man nun den Prozentwert in einem fbpanel anzeigen. Da ich weder weiß, was je nach verwendetem Akku mit "Unknown" passiert, noch, ob der Prozentwert ein- oder zweistellig ist, ist -c21-23 unbrauchbar, weil variabel. Immherhin, die letzte Zahl hätte ich ja jetzt dank eurer Hilfe. Eigentlich müsste man jetzt vom Endpunkt aus die Zeichen bis zum Leerzeichen vor dem Prozentwert zurückgehen und könnte dann auch -c21 berechnen. Dem Parameter "-c" Variablen anzudrehen, hab ich bisher nicht geschafft. Wenn mir jemand den kompletten code liefern könnte, wäre ich dankbar. Ansonsten würde ich mir ein Pascal-Programm schreiben (was anderes kann ich nicht), das den Wert in eine Datei schreibt, aus der ich ihn für fbpanel mit cat wieder herausholen würde. Aber die freepascal-Installation scheint ja sowas von unübersichtlich zu sein! :evil:

Grüße, Günther

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: bash, Länge einer Zeichenkette

Beitrag von syssi » 27.03.2011 21:53:36

Code: Alles auswählen

echo $(acpi -b | grep "Battery 0" | cut -d, -f2)
Dann musst du nur noch das fuehrende Leerzeichen entsorgen... oder ignorieren.

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: bash, Länge einer Zeichenkette

Beitrag von syssi » 27.03.2011 21:55:10

Achja... vermutlich geht es sogar einfacher. Such mal unter /sys nach acpi: find /sys -name acpi
Ich wuerde spekulieren, dass du dort eine Datei findest, die bei einem "cat" ebenfalls den Akkuladestand in Prozent auswirft.

guennid

Re: bash, Länge einer Zeichenkette

Beitrag von guennid » 27.03.2011 22:39:43

Super! Danke!

Und wenn du mir jetzt noch sagen könntest, was ich da mache, wäre es perfekt. Die Angaben zu -d und -f in der manpage zu cut sind mir völlig unverständlich.

Grüße, Günther

[edit:] wo sich acpitool da unter /sys den Akkustand holt, kriege ich in diesem Dschungel nicht raus.

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: bash, Länge einer Zeichenkette

Beitrag von newdeb » 27.03.2011 23:24:09

Nochmal zum Problem Zeichenkettenlänge:
Nichts gegen die bewährten Old-Style Methoden (wc -c, expr length), aber in der bash geht das doch wesentlich komfortabler:

Code: Alles auswählen

VAR="foo bar"
LEN=${#VAR}
echo $LEN

Benutzeravatar
TRex
Moderator
Beiträge: 8336
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: bash, Länge einer Zeichenkette

Beitrag von TRex » 27.03.2011 23:47:39

guennid hat geschrieben: Und wenn du mir jetzt noch sagen könntest, was ich da mache, wäre es perfekt. Die Angaben zu -d und -f in der manpage zu cut sind mir völlig unverständlich.
Was ist daran unverständlich?

cut teilt einen String über die Feldtrennzeichen in Felder auf, aus denen du dann bestimmte auswählst. -d gibt das Trennzeichen an, -f die Felder.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash, Länge einer Zeichenkette

Beitrag von Meillo » 28.03.2011 00:15:39

Wie waer's einfach damit:

Code: Alles auswählen

acpi -b | awk '{print $NF}'

Uebrigens, lasst doch dieses

Code: Alles auswählen

echo $(...)
einfach weg.
Use ed once in a while!

guennid

Re: bash, Länge einer Zeichenkette

Beitrag von guennid » 28.03.2011 10:26:00

@TRex2003

Danke für die Erklärung. Hab's jetzt verstanden!
TRex2003 hat geschrieben:Was ist daran unverständlich?
Wenn ich die Frage hätte beantworten können, hätte ich die manpage wahrscheinlich verstanden gehabt. :wink:

@newdeb
Sieht pascal-Syntax recht ähnlich.

Grüße, Günther

[edit:] Nochmals vielen Dank an alle Beteiligten. Ich denke ich habe einiges dazu gelernt.

Antworten