regexp - fix názvu souboru

regexp - fix názvu souboru
« kdy: 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
« Poslední změna: 30. 10. 2019, 16:47:51 od Petr Krčmář »


Ravise

  • ***
  • 113
    • Zobrazit profil
    • E-mail
Re:regexp - fix nazvu douboru
« Odpověď #1 kdy: 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.

Re:regexp - fix nazvu douboru
« Odpověď #2 kdy: 30. 10. 2019, 13:07:58 »
Kód: [Vybrat]
sed 's/\(.*\)\([_.\-]\)\(.*\)[_.\-]\(.*\)/\1\2\3.\4/'

Re:regexp - fix nazvu douboru
« Odpověď #3 kdy: 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.

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:regexp - fix nazvu douboru
« Odpověď #4 kdy: 30. 10. 2019, 14:30:02 »
Kód: [Vybrat]
puvodni_nazvy | perl -pe 's/.([^._-]+$)/.$1/'


Re:regexp - fix nazvu douboru
« Odpověď #5 kdy: 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.

tecka

  • ***
  • 138
    • Zobrazit profil
    • E-mail
Re:regexp - fix názvu souboru
« Odpověď #6 kdy: 30. 10. 2019, 18:08:16 »
Takže poslední ._- nahradit tečkou?
Kód: [Vybrat]
sed 's/\(.*\)[._-]\([^._-]*\)/\1.\2/'

mhepp

  • ***
  • 122
    • Zobrazit profil
    • E-mail
Re:regexp - fix názvu souboru
« Odpověď #7 kdy: 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

Re:regexp - fix názvu souboru
« Odpověď #8 kdy: 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