# Demo 4 # Tehtävä 1 # s/ä/ä/g s/Ä/Ä/g s/ö/ö/g s/Ö/Ö/g # jne.
Tehtävä 2
# Demo 4
# Tehtävä 2
#
# Toiminta: Ensimmäinen korvaa-komento poistaa kaikki samalla rivillä
# kokonaan sijaitsevat tagit. Ensimmäinen tOPEN on vain "lipun tyhjennys",
# jotta ehdollista hyppyä voidaan käyttää myöhemmin. Tämän jälkeen silmukassa
# yhdistetään eri riveille jakautuneet tagit ja poistetaan ne, kunnes avoimia
# tageja ei enää ole.
#
s/<[^>]*>/ /g
tOPEN
:OPEN
/</ {
s/<[^>]*>/ /g
tOPEN
N
s/\n/ /g
tOPEN
}
Tehtävä 3
# Demo 4 # Tehtävä 3 # s/^[^:]*:[^:]*:[^:]*:[^:]*:// s/:.*// tai # Demo 4 # Tehtävä 3 # # huomattavasti hitaampi ratkaisu kuin edellinen s/\(^.*:\)\(.*\)\(:.*:.*$\)/\2/
Tehtävä 4
# Demo 4
# Tehtävä 4
#
# Korvataan regexp, out_file in_file omilla. Huomaa d-komennon
# paikka.
/regexp/ {
w out_file
r in_file
d
}
tai
#!/bin/sh
#
# Demo 4
# Tehtava 4
#
# Esim. shell-toteutuksesta.
echo "regexp>\c"
read regexp
echo "input file>\c"
read ifile
echo "output file>\c"
read ofile
sed '
/'$regexp'/ {
w '$ofile'
r '$ifile'
d
}' $1 > $2
Tehtävä 5
#n # # Demo 4 # Tehtävä 5 # # Kommentti: GNU sed toteutus (\| -käyttö), voitaisiin korvata käyttämällä # kahta erillistä korvaus-komentoa. # # Toiminta: Kopioidaan työmuisti apumuistiin. Otetaan ensimmäinen pieni sanan # aloittava merkki talteen ja muunnetaan se isoksi. Vaihdetaan apumuisti ja # työmuisti keskenään. Korvataan talteen otettu / muunnettu merkki jollakin # merkkijonolla (jonka ei uskota esiintyvän tiedostossa, tässä §§§). # Vaihdetaan taas apumuisti ja työmuisti keskenään ja kopioidaan apumuisti # työmuistin perään (muutettu kirjain nyt työmuistin alussa). Järjestetään # työmuisti uudestaan (poistetaan §§§). # :ALKU h s/\(^\|.*[^a-zA-ZåäöÅÄÖ]\)\([a-zåäö]\)\([a-zA-ZåäöÅÄÖ.]*.*\)/\2/ tKORV bLOPPU :KORV y/abcdefghijklmnopqrstuvwxyzåäö/ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ/ x s/\(^\|.*[^a-zA-ZåäöÅÄÖ]\)\([a-zåäö]\)\([a-zA-ZåäöÅÄÖ.]*.*\)/\1§§§\3/ x G s/\(^[A-ZÅÄÖ]\)\(.*\)\(§§§\)\(.*\)/\2\1\4/ s/\n//g tALKU :LOPPU p tai # Demo 4 # Tehtävä 5 # # GNU-sed toteutus. Huomattavasti nopeampi kuin edellinen. Skandit # ei tässä toimi. Voitaisiin käsitellä erikseen. \< voi olla myös \b. # s/\<a/A/g s/\<b/B/g s/\<c/C/g s/\<d/D/g s/\<e/E/g # jne.