Tuossa kuvassa on muutama esimerkki, mutta yksi niistä puuttuu. Miten poimit 3 merkkiä, merkkijonon lopusta. Huomaa että tässä ei tunneta merkkijonon pituutta.
https://s5.gifyu.com/images/merkkijono.png
https://s5.gifyu.com/images/merkkijono.png
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Ketjusta on poistettu 1 sääntöjenvastainen viesti.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 18
Vanhimmat
Tepä olette älykäs, Te!
Niin kai kun Shelliltä se pöllii Sinolia! kun sen rahat taas loppu ja lääkkeetkin.
Olkoot merkkijono "123567890" muuttujassa "merkkijono".
merkkijono="'1234567890" && echo "${merkkijono: -3}"
Tulostaa "890".
Nyt on lista täydellinen, Kiitos!
T. ketjun avaaja
Häirikkö levittää Perättömia valheita
Firefoxista,
Linuxista
Ubuntusta.
ym.
Ei levitä tässä ketjussa. Kommentoi sinne, missä levittää!
string="1234567890"; echo ${string:7}
Tuo taitaa tulostaa 7 ensimmäistä merkkiä?
Jos jatkan tätä ei avaukseen piiriin kuuluvaa, niin sed -komentoa käyttäen voidaan suodattaa ei halutut merkit:
echo "1234567890" | sed -e "s/[1234567]//g" #890
Edellisessähän täytyi tuntea merkkijonon pituus, ja tässä taas täytyy tuntea ei halutut merkit. Laitoin vain siksi, jos joku saisi tästä ahaa-elämyksen. Itse asiassa oletin tuossa joitakin aikoja sitten jonkun käyttäneen sed -komentoa viestinsä sisällön muokkaamiseen, kun oli systemaattisesti vaihdettu välilyönnit alaviivaan.
T. Urpo
Kyllä se tulostaa kolme viimeistä, mutta siinä täytyy tuntea merkkijonon pituus, että osaa laittaa tuon 7. Siitä sainkin tuon idean tuohon hiukan sekavaan vastaukseen:
string="1234567890"; echo ${string:$((${#string}-3))}
Jossa suoritetaan tuo poistettavien määrän selvitys laskemalla, sehän on muuten sama kuin tuossa yllä oleva, mutta suora 7 on korvattu laskennan tuloksella, jolloin merkkijonon pituus voi olla mikä tahansa.
Joo niin se tulostaa alkaen merkistä 7 loppuun.
No ehkä se -3 toimii aloituksen tehneen tapaukseen parhaiten.
Tässä selvitetään ensin merkkijonon pituus:
echo ${#string}
josta sitten vähennetään kolme
string="1234567890"; echo ${string:$((${#string}-3))}
loppu tulos on: 890
T. Urpo
Tarviiko pituutta jossain muualla?
Miinusmerkillä tehtäessä pitää muistaa välilyönnin merkitys sen ja kaksoispisteen välillä.
merkkijono="1234567890";echo "${merkkijono:-3}"
1234567890
merkkijono="1234567890";echo "${merkkijono: -3}"
890
string="1234567890"; echo ${string:7:10}
Näitä ratkaisuja jotka perustuu siihen että tunnetaan merkkijonon pituus ja että tunnetaan merkkijonon sisältö, on mielettömästi.
Tämä ketju saattaakin olla aloittelevalle, varsin käsittämätöntä sotkua.
Jos raaskii Pythonin polkaista käyntiin, niin vaihtoehto voisi olla
echo "1234567890" | python3 -c "print(input()[-3:])"
890
Ja sekin toimii, ja nätisti toimiikin.