staging.inyokaproject.org

scriptbau: suchen und kopieren...

Status: Ungelöst | Ubuntu-Version: Ubuntu 15.10 (Wily Werewolf)
Antworten |

tomovic

Avatar von tomovic

Anmeldungsdatum:
25. August 2013

Beiträge: 238

hallo, ich habe einen string, der hat 100 Zeichen. wie kopiere ich die ersten 10 Zeichen in die Variale mycut? Kann mir jemand ein Beispiel machen, googlet habe ich schon

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

1
2
3
4
5
lang=$(echo {A..z})
kurz=${lang:0:10}
echo $lang; echo $kurz
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Doku dazu: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

Suchhilfe für’s nächste Mal: „bash substring“

itoss

Avatar von itoss

Anmeldungsdatum:
4. April 2014

Beiträge: 419

http://wiki.bash-hackers.org/syntax/pe

ich hatte immer nach parameter expansion gesucht.

was sonst immer geht und super einfach ist echo STRING12345678910 |cut -c 1-10 . Nicht schön aber die Syntax ist einfach einfach 😉

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Oder:

1
echo STRING12345678910 | egrep -o '^.{10}'

oder

1
echo STRING12345678910 | sed -r 's/(.{10}).*/\1/'

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

itoss schrieb:

was sonst immer geht und super einfach ist echo STRING12345678910 |cut -c 1-10 . Nicht schön aber die Syntax ist einfach einfach 😉

... ist aber teilweise bösartig, weil es mit Mehr-Byte-Zeichen (→ utf-8) nicht korrekt umgeht ! (die Par. Expansion ist da sauber) - Guckstu:

track@track:~$ echo STRING12345678910  |  cut -c 1-10
STRING1234
track@track:~$ echo STRÄNG12345678910  |  cut -c 1-10
STRÄNG123
track@track:~$ w=STRING12345678910
track@track:~$ echo ${w:0:10}
STRING1234
track@track:~$ w=STRÄNG12345678910
track@track:~$ echo ${w:0:10}
STRÄNG1234 

LG,

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

track schrieb:

itoss schrieb:

was sonst immer geht und super einfach ist echo STRING12345678910 |cut -c 1-10 . Nicht schön aber die Syntax ist einfach einfach 😉

... ist aber teilweise bösartig, weil es mit Mehr-Byte-Zeichen (→ utf-8) nicht korrekt umgeht ! (die Par. Expansion ist da sauber) - Guckstu:

Das war meinerseits aber Glück, das hatte ich auch nicht auf dem Schirm.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

track schrieb:

... ist aber teilweise bösartig, weil es mit Mehr-Byte-Zeichen (→ utf-8) nicht korrekt umgeht !

Wie gemein. Das wusste ich auch nicht. Beziehungsweise, ich dachte, dass genau dafür die Unterscheidung zwischen „-c“ und „-b“ existieren würde. Stellt sich aber raus, dass das bei GNU cut anscheinend nicht so wie gedacht funktioniert:

http://unix.stackexchange.com/questions/163721/can-not-use-cut-c-characters-with-utf-8

In OpenBSD hingegen:

# export LANG=en_US.UTF-8
# echo STRÄNG7890xxxxxxxxxxx | cut -c 1-10 
STRÄNG7890
# echo STRÄNG7890xxxxxxxxxxx | cut -c 4 
Ä

Und „-b“ arbeitet dann mit Bytes:

# echo STRÄNG7890xxxxxxxxxxx | cut -b 4 
�
# echo STRÄNG7890xxxxxxxxxxx | cut -b 4-5
Ä

So hätte ich das auch im GNU-Land erwartet. 😲

Antworten |