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
[[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
Vastaukset 13
Vanhimmat
grep "^\[\[.*\]\]\|^==.*==" data.txt | \
grep -v "\[\[\[.*\]\]\]\|===.*===" > uusidata.txt
(Toivottavasti palstan softa ei suodata merkkejä...)
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.
saa
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...
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.
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
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....
saako muuten kysyä, että miksi bashilla pitää tämän kanssa tapella?
huvi ja urheilu??? :)