Die letzten X Zeichen eines Strings einlesen - wie?

M

michaelg

Grünschnabel
Hallo zusammen,

ich bin auf der Suche nach dem Befehl, mitdem ich die letzen x Zeichen eines Strings auslesen kann.

Soll heißen:

String outpout ist zB.:
das ist mein string 123.445.323.33=234

Jetzt möchte ich die letzten 3 Zeichen (in diesem Fall also die 234) in eine neue Variable schreiben. Was nimmt man da cut? awk? sed?

Wichtig ist, das er "von rechts nach links" einließt und die letzten X Zahlen übergeben werden können, da der String keine fest Länge hat und variabel ist.

Jemand ne Idee?

Danke
Gruß Michael
 
Code:
 echo abc123 | sed 's/.*\(.\{3\}\)$/\1/'
liefert '123'

Ich hoffe mal das ist was du suchst.

Psyjo
 
*Senf dazugeb*

Wenn die Zeile jeweis ein Leerzeichen hat und du quasi die rechte Seite des Leerzeichens haben willst geht es auch so:
Code:
echo '123.445.323.33=234'|cut -d= -f2
# oder so:
echo '123.445.323.33=234'|awk -F= '{print $2}'
# oder so:
echo '123.445.323.33=234'|perl -anF= -le 'print $F[1]'

Wenns nur die letzten drei Zeichen seien sollen gehts mit (GNU) grep imho übersichtlicher:
Code:
echo foobar|grep -o '...$'
# oder so:
echo foobar|grep -o '.\{3\}$'
# oder mit egrep:
echo foobar|egrep -o '.{3}$'
# oder mit bash:
var=123.445.323.33=234
echo ${var: -3}
 
Zuletzt bearbeitet:
Ich bin uuuuuunwürdig
 
Zuletzt bearbeitet:
Ja du Held¹, lies mal genau, da steht bytes. You know about charsets, do you?
Code:
$ echo foobar|tail -c3
ar
$ echo foobar|tail -c4
bar
$ echo 123µ|tail -c3
µ
$ echo µφγvσöϑβµρινζρισι|tail -c10
�ρισι
$ echo 썂썃썍썙|tail -c4
썙
$ echo 썂썃썍썙|grep -o '...$'
썃썍썙
$ echo $LANG
en_US.UTF-8

ad 1: wie man in den Wald reinruft..

Also das "Helden" hättest du dir wirklich sparen können, aber nungut...
 
Ja, ja das gute alte ASCII. ;)
Und Heute?
Nichts ist mehr wie es scheint.
So verglüht das Heldentum am digitalen Horizont. ;)

@Gott_in_schwarz

Die Mordslösung mit 2 x rev und cut hast du vergessen. ;)

Verbraucht immerhin weniger als 5 Prozesse und funzt sogar. *lol*

Nix für Ungut.

Friede sei mit Euch (Ihr Helden)
*g*

Wolfgang
 
@Gott_in_Schwarz: Habe meinen Post deinen Anregungen zufolge editiert. Im Ernst, ich bin mir dessen vollkommen bewusst gewesen und mit ISO-* funktioniert es ja auch. Nur dass wir das unter Linux eigentlich fast nicht mehr einsetzen, das ist wohl wahr. Ich habe in meiner Firma genug Probleme damit gehabt, da hätte man wenigstens was dazu schreiben sollen.
 
Ach unwürdig, pff. Ging halt primär um das "Helden". Und das head da so archaisch ist, naja, schade drum in Unicode-Zeiten.
Friede, Freude, Apfelkuchen :)

Alibi-ontopic: (aber wieder byteorientiert :0)
Code:
echo foobar|rev|cat|xargs echo|cut -b 1-3|rev
(Disclaimer: Lieber nicht in Produktivcode verwenden. ^^)
 
Geiler Code... Nee, aber das tail Dingens ist wirklich blöde und du kannst wetten, dass wenn ichs stehengelassen hätte, jemand dasgefunden und sich irgendwann gewundert hätte, warums bei bestimmten Fällen komischerweise nicht klappt..
 
Code:
$ echo "Eint test mit 123"|rev|cut -c1-3|rev
123
Nicht Byteorientiert!
Trotzdem overkill.
 

Ähnliche Themen

Last mit etc/passwd anzeigen lassen

Server-Monitoring mit RRDTool

Zurück
Oben