Jos rivi sisältää merkkijonon...

Pitäisi etsiä tiedostosta rivit jotka ovat muotoa:

[[JOTAIN]]
ja
==JOTAIN==

muttei

[[[EI TÄTÄ]]]
eikä
===EIKÄ TÄTÄ===
eikä
=======EIKÄ MYÖSKÄÄN TÄTÄ========
jne..

Eli pitäisi korjata tämä koodi:


while read inputline
do
if [[ $inputline == ==*== ]]
then
echo $inputline >> uusidata.txt
fi
if [[ $inputline == [[*]] ]]
then
echo $inputline >> uusidata.txt
fi
done < data.txt
1370
Äänestä

Muut lukivat myös

Vastaukset 13

Vanhimmat

grep "^\[\[.*\]\]\|^==.*==" data.txt | \
grep -v "\[\[\[.*\]\]\]\|===.*===" > uusidata.txt

(Toivottavasti palstan softa ei suodata merkkejä...)

Äänestä
  • grep "^\[\[.*\]\]$\|^==.*==$" data.txt | \
    grep -v "\[\[\[.*\]\]\]\|===.*===" > uusidata.txt

    Aiemmasta jäi rivin loppumerkki "$" pois. Siis jos on tarkoitus poimia vain rivit, joilla "]]" tai "==" jälkeen ei ole mitään. Samoin poimitaan vain rivit, jotka alkavat "[[" tai "==", mikä olin jo aiemmin ottanut huomioon merkillä "^".

    Äänestä

  • Tom peli kirjoitti:

    grep "^\[\[.*\]\]$\|^==.*==$" data.txt | \
    grep -v "\[\[\[.*\]\]\]\|===.*===" > uusidata.txt

    Aiemmasta jäi rivin loppumerkki "$" pois. Siis jos on tarkoitus poimia vain rivit, joilla "]]" tai "==" jälkeen ei ole mitään. Samoin poimitaan vain rivit, jotka alkavat "[[" tai "==", mikä olin jo aiemmin ottanut huomioon merkillä "^".

    Saako sen toimimaan tolla "if:lla" niin kuin mulla oli?

    Tarkoitus on myöhemmin lisätä muutakin koodia sinne.

    Äänestä

  • helppppp me kirjoitti:

    Saako sen toimimaan tolla "if:lla" niin kuin mulla oli?

    Tarkoitus on myöhemmin lisätä muutakin koodia sinne.

    saa

    Äänestä

  • helppppp me kirjoitti:

    Saako sen toimimaan tolla "if:lla" niin kuin mulla oli?

    Tarkoitus on myöhemmin lisätä muutakin koodia sinne.

    Ilmeisesti harjoitustyössä käsketään käyttämään silmukkaa ja if-lausetta.

    Äänestä

  • Tom peli kirjoitti:

    Ilmeisesti harjoitustyössä käsketään käyttämään silmukkaa ja if-lausetta.

    Ei, vaan kuten sanoin if silmukkoihin on tarkoitus lisätä muuta koodia. Esim, tarkoitus on poistaa nuo == ja [[ merkit, jne...

    Äänestä

  • Tom peli kirjoitti:

    Ilmeisesti harjoitustyössä käsketään käyttämään silmukkaa ja if-lausetta.

    Heti toinen ongelma:

    Jos rivi sisältää merkkijonon:

    * Jotain ihan vaan

    niin tämä rivi

    echo $inputline >> data.txt

    lisää tiedostoon:

    Desktop Downloads Music Documents Movies Pictures Jotain ihan vaan

    Eli suoriittaa: "echo *" kommennon.

    Miten sen voi estää?

    Äänestä

  • helppppp me kirjoitti:

    Heti toinen ongelma:

    Jos rivi sisältää merkkijonon:

    * Jotain ihan vaan

    niin tämä rivi

    echo $inputline >> data.txt

    lisää tiedostoon:

    Desktop Downloads Music Documents Movies Pictures Jotain ihan vaan

    Eli suoriittaa: "echo *" kommennon.

    Miten sen voi estää?

    laita joku esimerkki tiedostosta ja esimerkki siitä mitä siitä pitää ottaa.. eihän tuosta kukaan saa enää tolkkua.

    Äänestä

  • /7\|/7\ kirjoitti:

    laita joku esimerkki tiedostosta ja esimerkki siitä mitä siitä pitää ottaa.. eihän tuosta kukaan saa enää tolkkua.

    Skripti lukee jokaisen rivin tiedostosta ja tulostaa sen uuteen tiedostoon:

    while read inputline
    do
    echo $inputline >> uusidata.txt
    done < data.txt

    Ongelma:

    Jos "data.txt" tiedostossa on vaikka rivi:

    * Hello World

    Sen sijan, että se tulostaisi sen sellaisenaan uuteen tiedostoon, se suorittaa:

    echo * -kommennon, eli listaa kaikki tiedostot mitä on hakemistossa ja lisää listauksen uuteen tiedostoon.

    Kokeile vaikka itse, miten eroaa:

    $ echo Hello World > uusi.txt
    ja
    $ echo * Hello World > uusi.txt

    Äänestä

  • helppppp me kirjoitti:

    Skripti lukee jokaisen rivin tiedostosta ja tulostaa sen uuteen tiedostoon:

    while read inputline
    do
    echo $inputline >> uusidata.txt
    done < data.txt

    Ongelma:

    Jos "data.txt" tiedostossa on vaikka rivi:

    * Hello World

    Sen sijan, että se tulostaisi sen sellaisenaan uuteen tiedostoon, se suorittaa:

    echo * -kommennon, eli listaa kaikki tiedostot mitä on hakemistossa ja lisää listauksen uuteen tiedostoon.

    Kokeile vaikka itse, miten eroaa:

    $ echo Hello World > uusi.txt
    ja
    $ echo * Hello World > uusi.txt

    niin,
    bash skriptaus on yhtä tarkkaa puuhaa kuin krapulan parantelu kossulla tai ripulin parantelu piereskelemällä.

    #!/bin/bash

    abc="* jotain"

    #tama on eri juttu
    echo $abc >> teksti.txt
    #kuin tama
    echo "$abc" >> teksti.txt

    Äänestä

  • /7\|/7\ kirjoitti:

    niin,
    bash skriptaus on yhtä tarkkaa puuhaa kuin krapulan parantelu kossulla tai ripulin parantelu piereskelemällä.

    #!/bin/bash

    abc="* jotain"

    #tama on eri juttu
    echo $abc >> teksti.txt
    #kuin tama
    echo "$abc" >> teksti.txt

    Kiitos,

    Vielä jos keksisi mikä on tehokkain tapa poistaa merkkijonon lopusta ja alusta kaksi merkkia:

    abc="[[Hello Wordl]]"

    Pitäis saada motoon:

    "Hello World"

    Äänestä

  • helppppp me kirjoitti:

    Kiitos,

    Vielä jos keksisi mikä on tehokkain tapa poistaa merkkijonon lopusta ja alusta kaksi merkkia:

    abc="[[Hello Wordl]]"

    Pitäis saada motoon:

    "Hello World"

    vähän vois itekin yrittää???

    abc="aajotainbb"

    q=`echo ${abc%??}`
    a=`echo ${q#??}`

    tai sitte vaikka /\[\[// ja /\]\]//
    tms....

    Äänestä

  • /7\|/7\ kirjoitti:

    vähän vois itekin yrittää???

    abc="aajotainbb"

    q=`echo ${abc%??}`
    a=`echo ${q#??}`

    tai sitte vaikka /\[\[// ja /\]\]//
    tms....

    saako muuten kysyä, että miksi bashilla pitää tämän kanssa tapella?
    huvi ja urheilu??? :)

    Äänestä

Kommentoi aloitusta


helppppp me kirjoitti:

Pitäisi etsiä tiedostosta rivit jotka ovat muotoa:

[[JOTAIN]]
ja
==JOTAIN==

muttei

[[[EI TÄTÄ]]]
eikä
===EIKÄ TÄTÄ===
eikä
=======EIKÄ MYÖSKÄÄN TÄTÄ========
jne..

Eli pitäisi korjata tämä koodi:


while read inputline
do
if [[ $inputline == ==*== ]]
then
echo $inputline >> uusidata.txt
fi
if [[ $inputline == [[*]] ]]
then
echo $inputline >> uusidata.txt
fi
done < data.txt

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