BASH Shell ja Merkkijonon käsittelyä

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
18209
Äänestä

Muut lukivat myös

Vastaukset 18

Vanhimmat

Tepä olette älykäs, Te!

Äänestä
  • Niin kai kun Shelliltä se pöllii Sinolia! kun sen rahat taas loppu ja lääkkeetkin.

    Äänestä

Olkoot merkkijono "123567890" muuttujassa "merkkijono".

merkkijono="'1234567890" && echo "${merkkijono: -3}"

Tulostaa "890".

Äänestä
  • Nyt on lista täydellinen, Kiitos!

    T. ketjun avaaja

    Äänestä

Häirikkö levittää Perättömia valheita
Firefoxista,
Linuxista
Ubuntusta.
ym.

Äänestä
  • Ei levitä tässä ketjussa. Kommentoi sinne, missä levittää!

    Äänestä

string="1234567890"; echo ${string:7}

Äänestä
  • Tuo taitaa tulostaa 7 ensimmäistä merkkiä?

    Äänestä

  • 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

    Äänestä

  • Anonyymi kirjoitti:

    Tuo taitaa tulostaa 7 ensimmäistä merkkiä?

    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.

    Äänestä

  • Anonyymi kirjoitti:

    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.

    Äänestä

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

Äänestä
  • 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

    Äänestä

string="1234567890"; echo ${string:7:10}

Äänestä
  • Näitä ratkaisuja jotka perustuu siihen että tunnetaan merkkijonon pituus ja että tunnetaan merkkijonon sisältö, on mielettömästi.

    Äänestä

Tämä ketju saattaakin olla aloittelevalle, varsin käsittämätöntä sotkua.

Äänestä

Jos raaskii Pythonin polkaista käyntiin, niin vaihtoehto voisi olla

echo "1234567890" | python3 -c "print(input()[-3:])"
890

Äänestä
  • Ja sekin toimii, ja nätisti toimiikin.

    Äänestä

Ketjusta on poistettu 1 sääntöjenvastainen viesti.

Kommentoi aloitusta


Anonyymi kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu