Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: vmonkey 14 Října 2011, 17:53:25
-
Ahoj,
vytvářím si skript pro tipovani.cz, ale nějak jsem se dostal k problému - Mám textový soubor http://ubuntuone.com/1u2j8uQN0HjmGP6Nezc0ZE a potřeboval bych se tam nějak zbavit speciálních znaků (ty | jsem tam vložil schválně). Původně jsem si myslel, že je to newline character \n, ovšem není. Tento znak vytváří také nové řádky, ale odstraňováním \n znaků se neodstraní. Samozřejmě že to můžu smazat ručně, ale chci to řešit skriptově...
Díky za odpověď.
-
To je znak pro carriage return, tedy pouze vrátí tisk na začátek řádku, bez posunu "papíru", tedy přechodu na další řádek. Značí se \r, takže výměna za new line (případně libovolný jiný znak) takto:
tr '\r' '\n'
-
Díky moc... Mimochodem jak jsi přišel na to, že to je zrovna to \r ? Jsem to nějak nemohl zjistit... Každopádně díky a K+:)
-
Mimochodem jak jsi přišel na to, že to je zrovna to \r ?
Jednoduše - stáhl jsem soubor, poslal na něj cat a viděl, protože BASH ten znak interpretuje správně a já o jeho existenci vím :)
-
Bohužel kdysi dávno, když lidé byli stejně hloupí jako dneska převzali psací stroj do počítače. A z toho nám vznikly dva samostatné příkazy pro "plnohodnotné" začnutí nového řádku.
Newline (\n) a carrier return (\r). Některé systémy to převzali a používají oba (např. Windows) - ale ještě není shoda v jakém pořadí. Jiné systémy logicky vzali jen jeden. Linux chytře vzal newline, jelikož je to takové intuitivní. Z prapodivných důvodů Mac vzal pouze \r... více např. tady: http://en.wikipedia.org/wiki/Newline
Je to základní vědomost o operačních systémech, měla by být v každém úvodním kurzu.
-
A aby to nebylo moc jednoduché, tak různé multiplatformní formáty definují konec řádku různě, takže pokud např. pošlu email z mého poštovního klienta na Linuxu (třeba někomu jinému kdo má Linux), zpráva se pošle s řádky ukončenými po "Windowsovsku" (\r\n - viz rfc5322).