( ace | 2008. 11. 27., cs – 22:30 )

Sed-del probaltam vegrehajtani, filenevbol szeretnem kigyomlalni, a nem oda valo karaktereket. A vegrehajtando cserek egy file-ban vannak (replace.sed)


s/Á/A/g
s/É/E/g
s/Í/I/g
s/Ó/O/g
s/Ö/O/g
s/Õ/O/g
s/Ő/O/g
s/Ú/U/g
s/Ü/U/g
s/Û/U/g
s/Ű/U/g
s/á/a/g
s/é/e/g
s/í/i/g
s/ó/o/g
s/ö/o/g
s/õ/o/g
s/ő/o/g
s/ú/u/g
s/ü/u/g
s/û/u/g
s/ű/u/g
s/\\/_/g
s/[^][().qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM0123456789-]/_/g

Bash változo cserevel mukodik is szaszi megoldasa alapjan, de engem az eredeti problema is erdekel, hogy sed-del hogyan lehet.
[:alnum:] az a problema, hogy jonehany nem oda valo karaktert is meghagy, ezzel kezdtem, ezutan tertem at a felsorolasra, bar ez a kettosbetuket meghadgya.
Pl.


Errol:    teszt/$ß&ŁßŁ@þ``aa.txt
Erre:     teszt/_ß_ŁßŁ_þ__aa.txt
Ahitott:  teszt/__________aa.txt

Jelenleg az a problema, hogyha a localas hu_hu.utf8 akkor kigyomlalja a kettos betuket.
Pl.


Errol: teszt/cs sc zs sz rs sr
Erre:  te_t/_sc_rs_sr

en_us locale eseten meg jo.


Errol: teszt/cs sc zs sz rs sr
Erre:  teszt/cs_sc_zs_sz_rs_sr

A script ide vonatkozo resze:


function new_name {
  local newfilename=$(echo "$1" | sed -f replace.sed)
#   | tr -s "_"
  case $charcase in
    l) echo $newfilename | tr [:upper:] [:lower:] ;;
    u) echo $newfilename | tr [:lower:] [:upper:] ;;
    *) echo $newfilename ;;
  esac
}