Newsgroup: it.comp.os.linux.iniziare
Titolo: Eliminazione CR

  Lavoro molto con file formato testo (anche DOS) e spesso mi trovo a
dover eliminare le ripetizioni di CR. Ad esempio:
Pippo, pluto
Paperino
  Dovrebbe diventare:
Pippo, pluto
Paperino
  Con word si puo' fare facilmente, sostituendo ^p^p con ^p. In linux
ho provato con sed, vi, addirittura con openoffice ma non ci riesco.
  Qualcuno puo' darmi una dritta, possibilmente da console? Faccio 
presente che il comando:
sed -e 's/\n\n/\n/g'
  non funziona. Quali sono i simboli da utilizzare per i vari tipi di
CR? Qualcuno sa aiutarmi?
  Grazie a tutti,
-- 
Gianfranco Bertozzi
Linux User #183585
gber...@tiscali.it


 Puo' andare ?
 
 sed 'n;d'

  sed 'n;d'
  No... :-)
  L'ho provata e mi mangia delle righe. :-o
  Spiego: questo e' il file prova
-------------------pro
solo per provare
come funziona
due spazi
trespazi
adesso uno normale
due ancora
tre di nuovo
basta
------------------
  e questo e' il file che mi esce con il comando
cat pro |sed -e 'n;d > pro2
-----pro2
solo per provare
come funziona
due ancora
tre di nuovo
-----------
  Che sta succedendo, per favore? :°)
  Un saluto, e grazie! :-)



 prova con 
 sed '/^$/d'
 

  sed '/^$/d'
  Niente... cosi' me li toglie tutti, lasciandone uno solo a fine 
riga. Come posso fargli capire che mi deve togliere SOLO le doppie 
righe vuote e non la singola?
  Ho provato anche con tr:
cat pippo | tr -s \\n
  che fa la stessa cosa del comando suggerito da te. Ma i seguenti 
comandi non danno i risultati sperati:
cat pippo | tr \\n\n \\n
cat pippo | tr [\n*2] \n
  Boh? :-o
  Cmq grazie. Se hai qualche altro suggerimento, io son qua! :°)


On Wed, 14 Jul 2004 14:03:20 +0000 (UTC), Gianfranco Bertozzi wrote:
La riga e` questa:
cat pippo | sed s/^M//g > paperino
ma bada che "^M" NOn e` accento circonflesso e M, ma
e` ctrl-m, cioe` l'esadecimale 0d --> CR, per scriverlo
devi dare: ctrl-v e poi un colpo a invio.
E sed non darlo su pippo stesso, ma pippo paperino.
-- 
Ciao,		|   Attenzione! campo "Reply-To:"  alterato	|
Remigio Zedda	|   posta: ti.ilacsit@zoigimer  <-- dx/sn  ;^)	|
	-- GNU/Linux 2.4.25 su Slackware 9.1

 E sed non darlo su pippo stesso, ma pippo paperino.
  Questa non l'ho capita. Io cmq ho ricopiato pari pari il comando che 
hai dato tu, ovviamente cambiando i nomi dei file.
  Grazie dell'interessamento,


  Sono ancora io...
  c'ho spippolato un po' ed ero giunto ad una soluzione piuttosto 
sporca. Ma non funziona nemmeno quella, e non capisco perche'! :-/
  Dunque: io devo trasformare le sequenze di PIU' DI 3 carriage return
in 2 CR, ma non devo toccare le righe separate da solo 1 o 2 CR.
  Avevo pensato di trasformare i CR in un carattere qualsiasi, ad
esempio ง e POI trasformare le ripetizioni di oltre 3 di questo ง in
un singolo doppio งง. Successivamente nuova trasformazione dei ง in
CR. Nota: ง e' un carattere qualsiasi, gli stessi problemi li trovo
usando P o altro.
  Esempio:
cat file | tr \\n ง   <--- trasforma tutti i CR in ง e il file
                           diviene una singola riga
tr [ง*0x3] ง          <--- elimina le sequenze di PIU' DI 3 ง
tr ง \\n              <--- rimette i CR al posto dei ง
  Pipando insieme questi comandi dovrebbe funzionare, no?
  In sed la sostituzione si dovrebbe fare con:
sed -e s/ง\{3,\}/ง/g
  ed anche in questo caso non va.
  Ma ottengo sempre una sostituzione _completa_ dei ง senza 
diminuzione. Se ho งงงงง, questi rimangono. E un
sed -e s/ง\{3,\}/X/g
  me li trasforma in XXXXX.
  Le sintassi [char*ripetizione] e s/char\{ripetizione\}/char/g non 
riducono un bel niente. Qualcuno puo' spiegarmi dove sbaglio?
  Ringrazio tutti per la pazienza,



 Sta diventando interessante.
 Io ho gia' dato :(
 Aspettiamo e vediamo la soluzione *deve* esserci
 
 Ciao
 

hai dato tu, ovviamente cambiando i nomi dei file.
Forse non sai alcune cose.. Sed invia riga per riga, il
file che riceve in input, allo standard output che e` la
console, cioe` il monitor.
Il file pippo dunque non viene e *non deve* venire mai
toccato, viene solo dato in pasto a sed da cat.
Inoltre: hai dato control_schiacciato_e_colpetto_a_v
rilascio tutto e colpetto a invio?
Sembra di no, perche' da me ha gia` sostituito tutti e
soli i tre 0d con due 0d, guarda qui.
[chissa` come si vedranno gli 0d=CR veri che devo dare..]
1. Ora faccio il file cr che contiene tre CR sulle righe 1 e
3 ed invece 2 CR nella 2 e 1 nella 4.
echo 'aaa' > cr
echo 'aaa' >> cr
echo 'aaa' >> cr
echo 'aaa' >> cr
2. Ora visualizzo. I CR sono l'esadecimale 0d, il newline
e` invece 0a. L'esa 61 e` l'ASCII a.
cat cr | hexdump -C
00000000  61 61 61 0d 0d 0d 0a 61  61 61 0d 0d 0a 61 61 61  |aaa....aaa...aaa|
00000010  0d 0d 0d 0a 61 61 61 0d  0a                       |....aaa..|
00000019
3. Ora visualizzo cio` che fa sed. Il file cr non viene
toccato, ovviamente.
cat cr | sed s///g | hexdump -C
00000000  61 61 61 0d 0d 0a 61 61  61 0d 0d 0a 61 61 61 0d  |aaa...aaa...aaa.|
00000010  0d 0a 61 61 61 0d 0a                              |..aaa..|
00000017
come vedi e` OK, ha sostituito 0d0d0d con 0d0d e non ha
toccato nessun altro 0d.
4. Ora creo il file cr2 (paperino ti dicevo).
cat cr | sed s///g > cr2
5. Ora visualizzo cr2.
cat cr2 | hexdump -C
00000000  61 61 61 0d 0d 0a 61 61  61 0d 0d 0a 61 61 61 0d  |aaa...aaa...aaa.|
00000010  0d 0a 61 61 61 0d 0a                              |..aaa..|
00000017
Perfetto!
6. Ora butto un occhio al vecchio cr e vedo che ovviamente
e` intatto.
cat cr | hexdump -C
00000000  61 61 61 0d 0d 0d 0a 61  61 61 0d 0d 0a 61 61 61  |aaa....aaa...aaa|
00000010  0d 0d 0d 0a 61 61 61 0d  0a                       |....aaa..|
00000019
Ps. Io avevo letto solo il post a cui m'ero attaccato,
perche' seguo .iniziare solo sporadicamente e dunque non
ho tutto il thread.. non sapevo dei tre CR.
Ma che diamine devi combinare? Casini con Uindous? ;-)


 Ma che diamine devi combinare? Casini con Uindous? ;-)
  No, stavolta no... :-)
  Quando posso edito i file di testo da console, e molti dati che mi 
arrivano (o scarico dalla rete) hanno formattazioni a dir poco 
"generose" in termini di CR e NL. Vorrei farmi un batchettino che 
prendesse questi file e li formattasse come piace a me, cioe' con una 
sola riga vuota a separare i vari paragrafi/capitoli o parti del 
testo. Poi lo passerei a par per giustificarlo, e otterrei una forma 
stampabile senza neanche passare da X... :-)
  Grazie per l'aiuto. Se hai bisogno di lavare la macchina o di
qualche altro lavoro di bassa manovalanza, chiamami pure! ;-)
  Saluti,


  Ho come l'impressione di aver risolto il problema. :°)
  C'e' un'opzioncina in cat, cat -s, che sostituisce le righe vuote 
multiple con una sola riga bianca. "Never more than one 
single blank line", come dice man cat... :°)
cat -s pippo | par w72 j d > pluto
  fa quello che mi serve! :-)
  Se poi vogliamo provare a risolvere il problema usando sed, a me non 
dispiace.
  Grazie ancora,


dispiace.
Se non ti disturba[*] uno spazio=20 al posto del newline,
allora c'e` Tr col velocissimo comando: <<tr '\n' ' '>>
Guarda, c'ho ancora il file cr di ieri:
cat cr|tr '\n' ' '|cat -A
aaa^M^M^M aaa^M^M aaa^M^M^M aaa^M 
Mentre invece, visualizzato [con cat -A, oggi non c'ho
voglia di hexdump;-)] senza togliere i NL sarebbe:
cat -A cr
aaa^M^M^M$
aaa^M^M$
aaa^M^M^M$
aaa^M$
Dunque ti fa un file di una sola riga.
[*] Ma allora dei tre CR non te ne importa piu`?
Ps. Cosa fa Par? I paragrafi come vuoi tu? Potresti darmi
qualche indicazione cosi` evito di cercare in rete?


 qualche indicazione cosi` evito di cercare in rete?
  Mi sembra il minimo! :-)
  par e' un programmino che elabora il testo come vuoi tu. Il comando
che uso per i miei testi e':
cat file | par w72 j d > fileformattato
  e mi giustifica a 72 colonne e rispetta la divisione in capitoli. E'
un programma molto intelligente e versatile, utilizzabile anche da
dentro vi. Tra l'altro, guardando meglio, mi sa che anche lui ha
l'opzione -e che elimina le troppe righe vuote senza usare sed o tr o
cat. :-o
  In rete ti c'ho cercato io: vai su 
http://jmcpherson.org/par.html
 e
trovi informazioni, documenti e il link (poco aggiornato, purtroppo)
per scaricarlo! :-)
  Fammi sapere se ti piace!


per scaricarlo! :-)
TNX!! Poi ci butto un'occhio:-))


 TNX!! Poi ci butto un'occhio:-))
  Fammi sapere come ti ci trovi!
  Saluti. E grazie,


> tastiera
Se proprio  non riesci ad andare a  capo (LF e` il  separatore di riga
standard)  puoi provare  ^J, se  non ci  hai fatto  caso M  e`  la 13^
lettera dell'alfabeto inglese. vi e Emacs te lo laciano inserire.
r>  _________________/\__________________
r> |                                     |
r> |   cat pippo | tr -d '\r' | cat -s   |
r> |_____________________________________|
Carino. Io di solito usavo dos2unix e unix2dos.
Un'altro tool che permette (tra le altre cose) di cambiare la codifica
e Emacs :).
<folkquiz>
Perche` e CR-LF e non LF-CR ? (se non me la raccontavano non ci sarei
arrivato)
Risposta (in rot13)
Qrevin qnyyr gryrfpeviragv  (r fv irqr napben aryyr  fgnzcnagv nq ntuv
nq rfrzcvb) qbir PE niivnin vy evgbeab pneeryyb, bcrenmvbar "yragn" zn
pbaqhpvovyr  va nhgbzngvpb han  ibygn niivngn;  YS snprin  ninamner vy
gnzoheb  qryyn  pnegn,  bcrenmvbar  irybpr  r aba  trfgvovyr  va  zbqb
nhgbzngvpb.  Dhvaqv qnaqb  cevzn vy  PE fv  snprin cnegver  vy evgbeab
pneeryyb r ary senggrzcb fv ninamnin yn pnegn.
</folkquiz>

 Risposta (in rot13)
lol :)
questa mi mancava ;)
-- 
RiK0
 Il sonno del teschio genera troll, e il quoting li manifesta.

Deriva dalle telescriventi (e si vede ancora nelle stampanti ad aghi
Si` lo sapevo, ma tu te lo sei chiesto pensando alle
vecchie macchine da scrivere meccaniche, dove in alcune
(con la leva lunga, e mi sembra fossero le IBM) veniva
fatto prima il newline?
E rot13 come lo spoiler di it.hobby.enigmi, e` cosi`?


> Deriva dalle telescriventi (e si vede ancora nelle stampanti ad aghi
r> Si` lo sapevo, ma tu te lo sei chiesto pensando alle
r> vecchie macchine da scrivere meccaniche, dove in alcune
r> (con la leva lunga, e mi sembra fossero le IBM) veniva
r> fatto prima il newline?
Quella e' un'altra  storia. Non mi pare che  macchine del genere siano
state mai  controllate da  un computer  e me lo  ricordo anche  su una
tyupewriter inglese  che mio nonno  in prigionia aveva  "fatto buttare
via" agli inglesi perche' irriparabile. Funziona ancora egregiamente.
Comunquie nel  caso delle macchine da  scrivere si faceva  prima il LF
perche' si poteva ottenere tutto con un solo movimento.
r> E rot13 come lo spoiler di it.hobby.enigmi, e` cosi`?
Come  ovunque  da  qualche   lustro  si  voglia  togliere  l'immediata
leggibilita` ad un testo :)
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico e fancazzista 
\/

echo -e "a\012b" "a\nb"
Ma certo e lo sapevo anche bene per il campanello \a
ma ieri si vede che pensavo solo ad immettere \n da
tastiera..
