24. huhtikuuta 2008
Luokittelu ja avainsanat: GNU/Linux, koodin riisunta, koodisanojen poistaminen, sed, XML
- Lähtökohta
- Kotihakemistossani on
esimerkki.abw -niminen, AbiWordilla luotu tiedosto. Tiedoston sisältö on muotoiltu XML-kielellä.
- Ongelma
- Haluan tulostaa tiedoston komentotulkki-ikkunassa siten, että mitään sen sisältämiä XML-koodisanoja, eli mitään merkkien < ja > väliin jäävää sisältöä ei näytetä.
- Ratkaisu
-
Suoritan seuraavan komennon:
cat ~/esimerkki.abw | sed 's/<[^>]*>//g' | sed '/./,/^$/!d'
Komento tulostaa tiedoston sisällön komentotulkissa ilman muotoilukoodeja. Lisäksi jälkimmäinen sed-komento korvaa peräkkäiset tyhjät rivit tulosteessa yhdellä tyhjällä rivillä.
Comments Off
29. maaliskuuta 2008
Luokittelu ja avainsanat: GNU/Linux, kirjainmerkit, sed, skandinaaviset kirjaimet, tiedostonimien muuntaminen, tr, UTF-8 -merkistökoodaus
- Lähtökohta
- Minulla on joukko tiedostoja joiden nimissä on ä- ja ö-kirjaimia. Kaikki tiedostonimet koostuvat yksinomaan pienistä kirjaimista, eli kirjainmerkeistä a-ö. Haluan muuntaa nimet siten, että ä:t korvautuvat a-kirjaimilla ja ö:t o-kirjaimilla. Aion käyttää muuntamiseen
tr-komentoa.
- Ongelma
-
Tr-komento tulkitsee sille antamiani skandinaavisia kirjaimia sisältäviä muunnossääntöjä väärin ja ennalta-arvaamattomalla vaikuttavalla tavalla. Seuraavassa on tästä esimerkkejä:
$ echo tiedostonnimi-jossa-on-ä | tr ä a
tiedostonnimi-jossa-on-aa
$ echo tiedostonnimi-jossa-on-ää | tr ä a
tiedostonnimi-jossa-on-aaaa
$ echo tiedostonnimi-jossa-on-äö | tr ä a | tr ö o
tiedostonnimi-jossa-on-aaao
$ echo tiedostonnimi-jossa-on-öö | tr ä a | tr ö o
tiedostonnimi-jossa-on-aoao
$ echo tiedostonnimi-jossa-on-öä | tr ä a | tr ö o
tiedostonnimi-jossa-on-aoaa
- Ongelman syy
- Tr-komento ei tue komentotulkissani käytössä olevaa UTF-8 -koodausta.
- Ratkaisu
-
Käytän tr-komennon sijasta sed-komentoa skandinaavisten kirjainten muuntamiseen, seuraavalla tavalla:
for file in *ä*; do mv $file `echo $file | sed -e 's/ä/a/g'`; done
for file in *ö*; do mv $file `echo $file | sed -e 's/ö/o/g'`; done
Kommentiton »