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: Zähle...

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: Zähle...

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 |