Sziasztok!
Szeretnék egy menetben ékezetes és szóközös fájlneveket átkonvertálni ékezet nélküli és szóköz nélküli fájlnevekre.
A WEB-en találtam és és átalakítottam a következő script-et:
#!/bin/bash
for i in *.*; do mv "$i" "`echo $i | sed -e 's/á/a/g;s/é/e/g;s/í/i/g;s/ó/o/g;s/ö/o/g;s/ő/o/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/Ú/U/g;s/Ü/U/g;s/Ű/U/g;s/ /_/g'`"; done
két fájllal próbáltam:
árvíztűrő tükörfúrógép.txt
ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP.TXT
A kisbetűsre működik a nagybetűsre nem.
Az eredmény:
arvizturo_tukorfurogep.txt
ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP.TXT
A cél amit el szeretnék érni:
arvizturo_tukorfurogep.txt
ARVIZTURO_TUKORFUROGEP.TXT
Mit csináltam rosszul? (nem értek a bash scriptekhez, ezt a script-et is csak összeollóztam több helyről)
Köszi
Levus
- 4380 megtekintés
Hozzászólások
pl rossz a karakter kódolás
De esetleg az iconv jobb megoldás erre.
- A hozzászóláshoz be kell jelentkezni
De akkor miért jó a kisbetűsre?
- A hozzászóláshoz be kell jelentkezni
eszt nem tudom, de tedd 2 sed-be talán, így könnyebb a hibakeresés is
- A hozzászóláshoz be kell jelentkezni
detox nem jo erre?
--
Don't Panic if you see me laughing,
that's not a bug, just a feature.
- A hozzászóláshoz be kell jelentkezni
detox filename
Eredmény:
A_rvA_ztA_rA_tA_kA_pp_rfA_rA3gA_copy_p.txt
A_RVA_ZTA_RA_TAoeKA-RFAsRA_GA_P.TXT
- A hozzászóláshoz be kell jelentkezni
van konfig is hozza (talan /etc/detox.conf) amiben megadhatod karakterkodolast meg talan mast is...
--
Don't Panic if you see me laughing,
that's not a bug, just a feature.
- A hozzászóláshoz be kell jelentkezni
A regex jó.
Kicsit átfogalmazva a teszt is jónak tűnik:
for i in árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP; do echo "$i" "`echo $i | sed -e 's/á/a/g;s/é/e/g;s/í/i/g;s/ó/o/g;s/ö/o/g;s/ő/o/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/Ú/U/g;s/Ü/U/g;s/Ű/U/g;s/ /_/g'`"; done
árvíztűrő arvizturo
tükörfúrógép tukorfurogep
ÁRVÍZTŰRŐ ARVIZTURO
TÜKÖRFÚRÓGÉP TUKORFUROGEP
Nekem az a tippem, hogy más karakterkódolással lehetnek a fájlok nevei, mint ahogy a shell vagy a sed kezeli.
Nálam pl. LC_ALL=en_US.UTF-8
- A hozzászóláshoz be kell jelentkezni
Hogy lett megoldva?
Amúgy nem *.*, hanem *, hogy olyan fájlokra is illeszkedjen, amiknek nincs a nevében pont.
- A hozzászóláshoz be kell jelentkezni
Az ide másolt script jó volt de rosszul használtam (copy-paste miatt)
Ez volt a rossz hívás:
#!/bin/bash
for i in *.txt; ....
Bocs ha gondot okoztam
Üdv
Levus
- A hozzászóláshoz be kell jelentkezni
Régi thread, de azért leírom, mert pont előkerült;
A sed parancs kiváltható ezzel, és az ember szeme nem folyik ki:
sed -e 'y/áéíóöőúüűÁÉÍÓÖŐÚÜŰ /aeiooouuuAEIOOOUUU_/'
- A hozzászóláshoz be kell jelentkezni
Akkor már:
tr "áéíóöőúüűÁÉÍÓÖŐÚÜŰ " "aeiooouuuAEIOOOUUU_"
- A hozzászóláshoz be kell jelentkezni
A sed es a tr is akkor bukik, ha UTF-8 -as kodolasrol van szo, ugyanis mind a ketto csak bajtot bajtra cserel, mig UTF-8 eseten ketbajtosak az ekezetes karakterek.
- A hozzászóláshoz be kell jelentkezni
A tr nem ismeri az utf8-at, a sed viszont igen. Tehát a két megoldás közül a sed a jobb.
- A hozzászóláshoz be kell jelentkezni
Jé, ezt nem is tudtam a sed-ről. Köszi!
- A hozzászóláshoz be kell jelentkezni