String beschneiden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

String beschneiden

Beitrag von linuxCowboy » 21.09.2014 19:14:25

Lässt sich ein String in einem Zug vorn und hinten beschneiden?

Code: Alles auswählen

s=beg_string_end

echo ${s#beg}
_string_end

echo ${s%end}
beg_string_

echo ???
_string_
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: String beschneiden

Beitrag von smutbert » 21.09.2014 19:31:34

Code: Alles auswählen

echo ${s:3:7}
Ok, die Zahlen stimmen nicht, aber zählen darfst du selbst :mrgreen: (wenn du wirklich die abzuschneidenden Zeichen angeben willst, weiß ich auch nichts)

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 21.09.2014 19:43:46

mit

Code: Alles auswählen

echo ${s:3:8}
_string_
geht dieser Fall.

Statt Anfang+Ende schneidet er die Mitte, die aber variabel ist.

Etwas wie

Code: Alles auswählen

echo ${s:3:-3} # funzt nicht
wäre gut!
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
habakug
Moderator
Beiträge: 4313
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: String beschneiden

Beitrag von habakug » 21.09.2014 19:48:25

Hallo!

Code: Alles auswählen

$ s=beg_string_end
$ echo ${s:3:8}
_string_
;-)

Gruss, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: String beschneiden

Beitrag von smutbert » 21.09.2014 19:50:06

Was sollte :3:-3 machen. -3 Zeichen ab der dem dritten Zeichen ausgeben, also in diesem Fall geb?

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 21.09.2014 19:54:53

smutbert hat geschrieben:Was sollte :3:-3 machen?
3 vorn und 3 hinten wegschneiden
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 21.09.2014 19:59:59

Hallo habakug, braucht mal wieder eine zündende Idee von dir! ;-)

Gruß,
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
habakug
Moderator
Beiträge: 4313
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: String beschneiden

Beitrag von habakug » 21.09.2014 20:04:49

Hallo!

Da war ich wohl zu langsam. Die Vorschaufunktion zeigt scheinbar nicht (mehr) an, das inzwischen ein neues Posting erstellt wurde. Sonst hätte ich mir das gespart.
Das

Code: Alles auswählen

$ echo ${s:3:-3}
_string_
funzt hier allerdings (bash 4.3).

Gruss, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: String beschneiden

Beitrag von smutbert » 21.09.2014 20:07:22

-3 funzt bei mir auch nicht
GNU bash, Version 4.3.24(1)-release…

aber habe ich noch einen Versuch frei?

Code: Alles auswählen

echo ${s:3:$len-3}
[/s]
Zuletzt geändert von smutbert am 21.09.2014 20:34:13, insgesamt 1-mal geändert.

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 21.09.2014 20:13:52

habakug hat geschrieben: Das

Code: Alles auswählen

$ echo ${s:3:-3}
_string_
funzt hier allerdings (bash 4.3).
Das geht wirklich!! :o

War mir nur logisch erschienen... du hast offenbar schon jessie.

Wenn das so ist wäre das ein Grund für ein source-build. Danke für den Tipp!

Du hast's wieder drauf... ;-)
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 21.09.2014 20:28:14

smutbert hat geschrieben:habe ich noch einen Versuch frei?

Code: Alles auswählen

echo ${s:3:$len-3}
Klar hast du noch einen Versuch frei!

Ich komme aber nur bis:

Code: Alles auswählen

echo ${s:3:$((${#s}-3))}
_string_end
$len ist ja nicht gesetzt.
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
4A4B
Beiträge: 926
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: String beschneiden

Beitrag von 4A4B » 21.09.2014 20:31:10

habakug hat geschrieben:Das

Code: Alles auswählen

$ echo ${s:3:-3}
_string_
funzt hier allerdings (bash 4.3).
Funktioniert bei mir auch unter Wheezy

Code: Alles auswählen

$ s=beg_string_end
$ echo ${s:3:-3}
_string_
$ bash --version
GNU bash, Version 4.2.37(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder jünger <http://gnu.org/licenses/gpl.html>

Dies ist freie Software.  Sie darf verändert und verteilt werden.
Für dieses Programm besteht keinerlei Garantie.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: String beschneiden

Beitrag von smutbert » 21.09.2014 20:38:25

:facepalm: $len ignoriert er einfach. Jetzt geht es bei mir doch auch mit :3:-3. Keine Ahnung wo ich mich da vertippt habe.
(Threads wie diesen werde ich in Zukunft nur mehr interessiert und ausschließlich lesend verfolgen)

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 21.09.2014 20:51:44

Ist eine neues Feature der bash!

alte manpage:
${parameter:offset:length}
... length must evaluate to a number greater than or equal to zero.


aktuell:
If length evaluates to a number less than zero, and parameter is not ‘@’ and not an indexed or associative array, it is interpreted as an offset from the end of the value of parameter rather than a number of characters, and the expansion is the characters between the two offsets.

Klasse ausgedacht! :D
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 22.09.2014 00:19:25

beim bash-bauen hat mir Chet Ramey noch einen Trick gezeigt:

Code: Alles auswählen

# examples/startup-files/bashrc
xtitle () 
{ 
        echo -n -e "\033]0;$*\007"
}

cd()
{
        builtin cd "$@" && xtitle $HOST: $PWD
}
wird zu:

Code: Alles auswählen

cd () { builtin cd "$1" && echo -ne "\e]0;$PWD\a";}
Mega :!: Cool
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: String beschneiden

Beitrag von linuxCowboy » 22.09.2014 01:34:57

Ich komm nicht mehr nach Hause!! 8O

Code: Alles auswählen

/tmp $ cd () { builtin cd "$1" && echo -ne "\e]0;$PWD\a";}
/tmp $
/tmp $ cd
/tmp $
... Fix:

Code: Alles auswählen

/tmp $ cd () { builtin cd "${1-$HOME}" && echo -ne "\e]0;$PWD\a";}
/tmp $
/tmp $ cd
/home/lxc $
Ich sollte Chet einen Tipp geben... ;-)
-der_linux_cowboy --- Besser werden! ... f*** w$$

Antworten