Hei,
Data on:
abbd
dbdb
adbd
babb
Miten voin toteuttaa tehokkaasti:
1. jokaiselta riviltä vain 2:detta ja 3:metta merkkiä tulee käsitellä
2. jos käsiteltävä merkki on b tulee se korvata merkillä _
Tällöin esimerkin datasta pitäsi saada:
a__d
d_db
ad_d
ba_b
Miten tämä,kiltit gurut kertokaa.
jos teen esim:
sed s/b/_/g
tämä ei toimi palauttaa:
a__d
d_d_
ad_d
_a__
Kiitä teitä
Data on:
abbd
dbdb
adbd
babb
Miten voin toteuttaa tehokkaasti:
1. jokaiselta riviltä vain 2:detta ja 3:metta merkkiä tulee käsitellä
2. jos käsiteltävä merkki on b tulee se korvata merkillä _
Tällöin esimerkin datasta pitäsi saada:
a__d
d_db
ad_d
ba_b
Miten tämä,kiltit gurut kertokaa.
jos teen esim:
sed s/b/_/g
tämä ei toimi palauttaa:
a__d
d_d_
ad_d
_a__
Kiitä teitä
Vastaukset 9
Vanhimmat
Cut:lla 1. Merkki muuttujaan a, 2-3 muuttujaan b ja 4. C.
Sed:ität b:n
Tulos = a b c
Noin nyt äkkisellään, varmaan oikeasti fiksumpiakin tapoja olisi..
joo-o tuota kokeilin itsekkin, ihan siisti ja helppooteuttaa, mutta todella hidas.
Tulisi muokata > 20MB tavaraa :(
Tosin, tuota käytän koska parempaa en ole keksinyt :(
Mietin vaan että olisiko sedissä käytössä string ranget ja miten?
^(.{2})
>> olisiko sedissä käytössä string ranget ja miten? >>
Tässä yksi versio string rangesta, älkää vain kysykö miksi toimii (jos toimii :)
$ cat koe
adbd
babb
dbdb
abbd
$ cat koe | sed -e 's/\(^.\)\(b\)/\1\_/g' -e 's/\(^..\)\(b\)/\1\_/g'
ad_d
ba_b
d_db
a__d
Hmm.. oisko tässä kyseessä se että b:n jälkeen jos on b, korvataan myös se?
Juju on siinä, että tsekkaa mikä merkki on rivin alusta lukien toisena (^.)b ja kolmantena (^..)b
$ cat data
adbd
babb
dbdb
abbd
Ehkä havainnollisempaa, jos kumpikin etsi/korvaa ajetaan erikseen
Mitä tapahtuu sarakkeessa 2:
$ cat data | sed 's/\(^.\)b/\1_/g'
adbd
babb
d_db
a_bd
Mitä tapahtuu sarakkeessa 3:
$ cat data | sed 's/\(^..\)b/\1_/g'
ad_d
ba_b
dbdb
ab_d
Eroa noilla on vain yhden pisteen verran. Ja nämä molemmat sedit yhdistettynä yhdeksi sediksi (huomaa option -e lisäykset):
$ cat data | sed -e 's/\(^.\)b/\1_/g' -e 's/\(^..\)b/\1_/g'
ad_d
ba_b
d_db
a__d
Nuo rumat harakanvarpaat johtuu haussa käytettyjen sulkeiden erityismerkityksen eskeippaamisesta bash-tulkilta. Sulkeitten sisällä oleva "search-pattern" säilytetään mukaan lopulliseen tulostukseen, siksi lisätty \1.
http://www.grymoire.com/Unix/Sed.html#uh-4
Kotitehtävät on tarkoittu kehittämään omia "ohjelmointi" taitoja.
On se vaan niin mukavaa saada aina joltain mokkulalta tällainen vastaus.
Kiitos., olette eriomainen ihminen.
opiskelet alaa, miksi?
En opiskele enää, valmistuin 1/2 vuotta sitten. Opiskelin koska ala on kiinnostava. Miksi opetat kun et osaa opettaa? tulisi sinun opetella itse.
Mielestänne täällä tulisi vain:
1. jakaa tietoa ilman että kukaan kysyy.
2. olla kysymättä mitään.
3. ihan vain v*lla täällä kysyjille, jos he jotain kysyvät.
Olette varmaan todella sosiaalinen, kaikki rakavastavat ATK-opea.