Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: 0xenon 0xenon 30. 10. 2019, 12:31:45

Název: regexp - fix názvu souboru
Přispěvatel: 0xenon 0xenon 30. 10. 2019, 12:31:45
mam tuhle mnozinu 'kodovanych' nazvu souboru:
Kód: [Vybrat]
aaa-bbb-ccc-txt
aaa-bbb-ccc.txt
aaa-bbb.ccc.txt
aaa_bbb-ccc_txt
aaa.bbb-ccc_txt
...

jde o to z techto nazvu sestavit spravny nazev souboru, pricemz priponu vzdy predchazi dany znak, v tomto pripade
Kód: [Vybrat]
(-|.|_)
takze vysledek by mel byt:
Kód: [Vybrat]
aaa-bbb-ccc-txt => aaa-bbb-ccc.txt
aaa-bbb-ccc.txt => aaa-bbb-ccc.txt
aaa-bbb.ccc.txt => aaa-bbb.ccc.txt
aaa_bbb-ccc_txt => aaa_bbb-ccc.txt
aaa.bbb-ccc_txt => aaa.bbb-ccc.txt

idealne sed, perl

diky
Název: Re:regexp - fix nazvu douboru
Přispěvatel: Ravise 30. 10. 2019, 12:57:00
Kód: [Vybrat]
( rev | sed [nahraď první výskyt] | rev ) < odkud-bereš-původní-názvy
Anebo, jestli jsou všechny přípony stejně dlouhé (dle vzorku to vypadá, že jo), stačí "upravit" čtvrtý znak od konce.
Název: Re:regexp - fix nazvu douboru
Přispěvatel: kozzi11 30. 10. 2019, 13:07:58
Kód: [Vybrat]
sed 's/\(.*\)\([_.\-]\)\(.*\)[_.\-]\(.*\)/\1\2\3.\4/'
Název: Re:regexp - fix nazvu douboru
Přispěvatel: Honza1Ubuntu 30. 10. 2019, 14:01:04
Ta pripona je vzdy txt ? Pokud ano, bylo by to jednoduzsi. Pred priponou je vzdy tento znak, jeden z techto 3 znaku -._ ? Jsou nazvy souboru stejne dlouhe ?

Pokud je pripona vzdy txt a txt neni jinde v nazvu souboru (nazy souboru muzou byt pritom ruzne dlouhe), tak:

Kód: [Vybrat]
Puvodni_Nazvy | sed "s/\-txt/\.txt/g" | sed "s/_txt/\.txt/g" >> Nove_Nazvy

Jinak velmi doporucuji pouzivat v nazvu i pripone souboru 62 alfa-numerickych znaku a podtrzitko _, pred priponou pak tecku. Jinak to v budoucnu muze prinest komplikace.
Název: Re:regexp - fix nazvu douboru
Přispěvatel: gill 30. 10. 2019, 14:30:02
Kód: [Vybrat]
puvodni_nazvy | perl -pe 's/.([^._-]+$)/.$1/'
Název: Re:regexp - fix nazvu douboru
Přispěvatel: 0xenon 0xenon 30. 10. 2019, 17:20:52
Ta pripona je vzdy txt ? Pokud ano, bylo by to jednoduzsi. Pred priponou je vzdy tento znak, jeden z techto 3 znaku -._ ? Jsou nazvy souboru stejne dlouhe ?

Pokud je pripona vzdy txt a txt neni jinde v nazvu souboru (nazy souboru muzou byt pritom ruzne dlouhe), tak:

Kód: [Vybrat]
Puvodni_Nazvy | sed "s/\-txt/\.txt/g" | sed "s/_txt/\.txt/g" >> Nove_Nazvy

Jinak velmi doporucuji pouzivat v nazvu i pripone souboru 62 alfa-numerickych znaku a podtrzitko _, pred priponou pak tecku. Jinak to v budoucnu muze prinest komplikace.

S tim jen souhlas, ja ty nazvy netvoril, jen potrebuju dat dohromady alespon priponu. Ty zkomoleniny vznikly z urcitych duvodu.
Pripona se muze lisit a i jeji velikost. Navic filename muze obsahovat non-ascii znaky.
Název: Re:regexp - fix názvu souboru
Přispěvatel: tecka 30. 10. 2019, 18:08:16
Takže poslední ._- nahradit tečkou?
Kód: [Vybrat]
sed 's/\(.*\)[._-]\([^._-]*\)/\1.\2/'
Název: Re:regexp - fix názvu souboru
Přispěvatel: mhepp 31. 10. 2019, 10:20:58
A dej si pozor na kolize:

Kód: [Vybrat]
123-456-789.txt
123-456-789_txt

budou mít po přejmenování stejné jméno.

Takže pro jistotu na konci zkontroluj:

Kód: [Vybrat]
cat vysledny_seznam | sort | uniq -d
Název: Re:regexp - fix názvu souboru
Přispěvatel: 0xenon 0xenon 31. 10. 2019, 10:57:53
A dej si pozor na kolize:

Kód: [Vybrat]
123-456-789.txt
123-456-789_txt

budou mít po přejmenování stejné jméno.

Takže pro jistotu na konci zkontroluj:

Kód: [Vybrat]
cat vysledny_seznam | sort | uniq -d

no vidis, diky za upozorneni