Ciao a tutti, ho unfile creato con latex2html che ha alcuni errori. In particolare, i tag delle referenze sono tutti sballati, con un accapo di troppo. Invece di, per esempio:

<A HREF="xxx"> yyy </A>

ho un accapo subito dopo la prima A. Questo non è un problema per visualizzare l'html con un browser, ma lo è se voglio convertirlo in .doc o .docx (per il .odt, Libreoffice mi apre correttamente il file finale, ma mi da' errore Word).

Visto che questo problema capita solitamente ai tag chiamati "A", e visto che le conversioni le sto facendo con uno scriptino in bash, volevo togliere i backslash con sed, qualcosa tipo sostituire '<A\n' con '<A', ma non riesco a trovare la combinazione giusta. Qualcuno sa come si faccia?

Grazie mille!

chiesto 18 Gen '14, 16:48

matteo-mori87's gravatar image

matteo-mori87
25114


Ciao,

sed 's/A\\n/A/g' inputfile.html > outputfile.html

sostituisce (s/) le occorrenze di "A\n" (A\n/) con "A" (A) globalmente (/g).

Alberto

coll. permanente

ha risposto 18 Gen '14, 18:27

Alb's gravatar image

Alb
20112

@Alb: lo hai testato? Non funziona, dato che il loop standard di sed legge una linea, elimina il \n , applica lo script e rimette il \n quando stampa, quindi lo script non vede il \n.

(18 Gen '14, 20:05) enzotib ♦♦ enzotib's gravatar image

@enzotib Sul mio computer funziona. Lo ho testato con un file html.

echo "<A\n" | sed 's/A\n/A/g'

mi dà come output

<A

(18 Gen '14, 20:13) Alb Alb's gravatar image

@Alb: ma hai visto che echo "<A\n" non dà un vero newline ma una sequenza dei due caratteri '\' e 'n' ?

(18 Gen '14, 20:56) enzotib ♦♦ enzotib's gravatar image

Chiedo scusa. In effetti credo che avrei dovuto usare "echo -e" e se lo avessi fatto avrei notato che il codice che ho suggerito sopra non cancella il newline.

(18 Gen '14, 21:18) Alb Alb's gravatar image

Non è banale operare sui newline con sed, dato che di norma sed opera su una linea per volta, togliendo il newline prima di applicare lo script e rimettendolo prima di stampare l'output.

Il seguente comando però dovrebbe fare quanto richiesto:

sed '/<A *$/N;s/\n//' input-file

dove viene usato il comando N che aggiunge al pattern space un newline seguito dalla successive linea di input. Il comando di sostituzione poi fa il resto.

coll. permanente

ha risposto 18 Gen '14, 21:22

enzotib's gravatar image

enzotib ♦♦
14.0k112186

@matteo-mori87: anziché darmi punti reputazione prendendoli dai tuoi, preferirei che votassi la domanda, se consideri che lo meriti, e magari che scegliessi una risposta da accettare, la mia o la tua, secondo quello che ritieni più adatta come soluzione: queste cose tra l'altro non intaccherebbero la tua reputazione.

(19 Gen '14, 12:43) enzotib ♦♦ enzotib's gravatar image

Ok, innanitutto grazie a tutti per le risposte :-) Googlando sono riuscito a trovare una soluzione:

sed ':a;N;$!ba;s/<A\n/<A/g' prova.html

(Non so perché l'anteprima di Chiedi non mi faccia vedere i minore <, li ho sostituiti con asterischi nel codice sovrastante). L'unica cosa è che non ho capito cosa faccia il comando prima della sostituzione...

Anche il comando di @enzotib funziona egregiamente :)

coll. permanente

ha risposto 18 Gen '14, 21:32

matteo-mori87's gravatar image

matteo-mori87
25114

modificato 18 Gen '14, 21:36

enzotib's gravatar image

enzotib ♦♦
14.0k112186

1

@matteo-mori87: è solo l'anteprima, se li lasci poi nella domanda si vedono correttamente.

(18 Gen '14, 21:37) enzotib ♦♦ enzotib's gravatar image
1

@matteo-mori87: il comando prima della sostituzione semplicemente è un ciclo in cui tutto il file viene inserito nel pattern space.

(18 Gen '14, 21:41) enzotib ♦♦ enzotib's gravatar image

@enzotib Grazie dell'aiuto, ora dovrei aver capito il perché di questi due comandi per togliere i newline. Immagino che il tuo comando sia più efficiente dal punto di vista della memoria...

(18 Gen '14, 21:46) matteo-mori87 matteo-mori87's gravatar image

@matteo-mori87: sì, in effetti dovrebbe essere così, anche se con le disponibilità di memoria dei computer attuali nessuno noterebbe la differenza, a meno di tentare di processare un file di testo della dimensione di diversi GB :)

(18 Gen '14, 21:50) enzotib ♦♦ enzotib's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×93
×6

domanda posta: 18 Gen '14, 16:48

domanda visualizzata: 1,065 volte

ultimo aggiornamento: 19 Gen '14, 12:43

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.