Portál AbcLinuxu, 13. května 2025 20:51

Dotaz: sed - nahrazení lichého resp. sudého výskytu znaku

27.4.2012 13:40 bhy | skóre: 35 | blog: bhyblog | brno
sed - nahrazení lichého resp. sudého výskytu znaku
Přečteno: 319×
Odpovědět | Admin
Přeju příjemné odpoledne, potřeboval bych programem sed nahradit každý lichý výskyt znaku x znakem y a každý sudý výskyt znaku x znakem z (jde mi o jednoduchou konverzi anglických uvozovek na české). Asi jsem špatně hledal, ale z manuálové stránky ani z návodů, co jsem vygooglil, jsem to nějak nepobral. Mohl bych poprosit o nakopnutí? Díky moc. Jedná se o GNU sed verze 4.2.1.
PB
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.4.2012 13:56 me vakérav
Rozbalit Rozbalit vše Re: sed - nahrazení lichého resp. sudého výskytu znaku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba takto

cat soubor | sed -r 's/"([^"]*)"/„\1“/g'

Ale možná uvažuj o tom, jestli nebude lepší nahrazovat ty uvozovky podle toho, jestli je před nimi nebo za nimi mezera.

Jo a asi nemyslíš anglické uvozovky, ale počítačové, angličtina má levou a pravou uvozovku jinou :-)
xkucf03 avatar 27.4.2012 21:12 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: sed - nahrazení lichého resp. sudého výskytu znaku
+1 Navíc se taky může stát, že v textu bude něco jako 3,5" disketa a všechny následující uvozovky pak budou špatně.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
27.4.2012 13:57 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: sed - nahrazení lichého resp. sudého výskytu znaku
Odpovědět | | Sbalit | Link | Blokovat | Admin
jde mi o jednoduchou konverzi anglických uvozovek na české
A nebylo by jednodušší předpokládat, že otvírací uvozovka má před sebou mezeru a uzavírací ji má za sebou? Pak by stačilo něco jako
sed -e 's/ "/ „/' -e 's/"\([ ,.;!?]\)/“\1/'
Tohle by navíc fungovalo i přes víc řádků, což ten původní nápad nezvládne. Lepší řešení by možná bylo použít AWK/PERL/... a pamatovat si, která uvozovka byla poslední.

Mimochodem - dávejte do titulku to, co potřebujete vyřešit - to není nahrazování sudých a lichých výskytů, ale předělání uvozovek. Třeba bude někdo vědět konkrétní program - takhle napsané téma ho ale nemusí oslovit ;-).
I am always ready to learn although I do not always like to be taught. (W. Churchill)
1.5.2012 22:37 l4m4
Rozbalit Rozbalit vše Re: sed - nahrazení lichého resp. sudého výskytu znaku
Otevírací uvozovka má téměř vždy před sebou mezeru, ale uzavírací mít nemusí, předvším pokud se používají uvozovky sémanticky (konvence v angličtině je esteticky, ne sémanticky, ale v technických dokumentech se moc nedodržuje), tedy:
You can quit vi using the command ":q".
Běžná anglosaská konvence (nepraktická):
You can quit vi using the command ":q."
Další problematický bod je přímá řeč, která když je v angličitně přes více odstavců, podle běžné konvence se na začátku každého odstavce vysází otevírací uvozovky/apostofy, aby se připomnělo, že je stále součástí té přímé řeči, ale na koncích průběžných odstavců se nesází nic, až na konci úplně posledního.

Celkově mi přijde, že to bude muset nakonec projít člověk, resp. že je zapotřebí stanovit pravidla pro konkrétní typ textů a styl, a řešit věci jako když se uprostřed odstavce (věty...) objeví otevírací uvozovka, ale ukončení se nevyskytne dostatečně brzy, a přinejmenším na to upozornit coby na možný problém, což prostý regulární výraz neudělá.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.