SED, regexp a UTF-8 [vyřešeno]

Dobrý den,

toto není problém konkrétně Fedory, ale asi obecně všech Linuxů.
Ale dělám to ve Fedoře, proto se ptám tady.

Potřeboval bych pomocí sedu upravit textový soubor a to tak, že některé znakové skupiny bych rád nahradil nějakým znakem.

Konkrétně mám v souboru text:

Teplota oh$0159íva$010d vody solární oh$0159ev p$0159ední

a chci z toho udělat

Teplota ohřívač vody solární ohřev přední

(je to export z jistého software, který při exportu do csv nahradí některé diakritické znaky dolarem a číslem )

napsal jsem skript:

s/\$016f/ů/g
s/\$0159/ř/g
s/\$010d/č/g

spustil sed a výsledek je toto:

Teplota ohĹYívaÄM vody solární ohĹYev pĹYední

Podle gůglu je použití SEDu ve spojení s UTF-8 často diskutovaným problémem, ale řešení jsem nenalezl.

Pokud nahrazuji písmenama bez diakritiky, tak to funguje, jak jsem zamýšlel, ale přece jenom, dokumentace by neměla vypadat jak z počítače v roce 1980.

Nemáte někdo zkušenosti s UTF-8 při zpracování pomocí SEDu?

Není to úplně odpověď na otázku, ale perl je všude a syntax je stejný.


echo "Teplota oh$0159íva$010d vody solární oh$0159ev p$0159ední" | perl -p -e 's,$010d ,č ,g'
Teplota ohívač vody solární ohev pední

č se mi zobrazilo. Pokud to budeš chtít opravit v souboru tak přidat -i k perlu.

V čem se ten výsledek takto špatně zobrazuje? Pokud si to spustím v bashi v urxvt terminálu, tak mi to funguje jak má, stejně tak to správně sed cpe i do souboru. Nemáš někde špatně nastavené kódování?

Jinak +1 za perl.

A pro jistotu bych to dal do souboru, který už má kódování nastavené na utf-8.

stderr napsal(a):

V čem se ten výsledek takto špatně zobrazuje?
Pokud si to spustím v bashi v urxvt terminálu,
tak mi to funguje jak má, stejně tak to

Pro práci s txt soubory používám výhradně editor JOE v CLI, Leafpad v XFCE a KATE v KDE. Veškerý materiál v UTF-8.
S tím perlem to ještě bude husté, v životě jsem o něj nezavadil, tak netuším, kupříkladu jak tam dát těch vzorů povícero. Nu, snad na to přijdu.

stderr napsal(a):

Nemáš někde špatně nastavené kódování?

Kdybych tušil, jak nastavit kódování pro SED, tak se tak blbě neptám, no něco o tom jsem vygůglil, ale absolutně nepochopil co kde jak.

stderr napsal(a):

A pro jistotu bych to dal do souboru, který už má kódování nastavené na utf-8.

Uf, tak už to funguje. To byl ten problém.
Ten soubor jsem ve Woknech nejprve natáhl do PSPadu a uložil natvrdo jako UTF-8.
Pak přebůtoval do Fedory a pustil SED, tak jako předtím.
A už je to správně.

Dík za nakopnutí správným směrem.

No to je dost drsne…:slight_smile: Nevim zda to je nejaka standardni vec nicmene k identifikaci utf8 souboru se pouziva


prijde mi ovsem zvlastni, ze by to respektoval sed.

No, on ten vyexportovaný soubor byl ve Win1250, jak jsem později zjistil, ně zmátlo, že jistý editor si jej automaticky z tohoto kódování převedl, i když měl očekávat UTF.
Ale ten PSPadový mezikrok není ani moc obtěžující, protože export je ze software Rockwell Studio 5000 a to je wokenní aplikace. Stejně to musím nejprve dát do PSPadu a nějaké věci z toho vykopat.