2012-07-19 11 views
12

Tengo un archivo que contiene un poco de látex:Bash: caracteres especiales se perdieron cuando se lee el archivo

\begin{figure}[ht] 
\centering 
\includegraphics[scale=0.15]{logo.pdf} 
\caption{Example of a pdf file inclusion} 
\label{fig:pdfexample} 
\end{figure} 

quiero leer en un script bash:

while read line 
    do 
    echo $line 
    done < "my.tex" 

La salida es

begin{figure}[ht] 
centering 
includegraphics[scale=0.15]{logo.pdf} 
caption{Example of a pdf file inclusion} 
label{fig:pdfexample} 

¿Por qué perdí las barras invertidas y los espacios iniciales?

¿Cómo mantenerlos?

+1

¿Qué haces con cada línea que requiere que la leas línea por línea? En este momento, por supuesto, puedes reemplazar el ciclo while con 'cat my.tex'. – chepner

+0

Realmente compruebo qué hay en cada línea porque quiero mantener una parte del archivo entre dos "etiquetas" especiales. – Barth

Respuesta

17

Se perdieron las barras invertidas y espacios porque bash (a través de su orden interna de lectura) está evaluando el valor del texto - las variables de sustitución, en busca de caracteres de escape (tabulación, nueva línea), etc. Véase the manpage por algunos detalles. Además, echo combinará espacios en blanco.

En cuanto a su conservación, no estoy seguro de que puedas. Es probable que obtendría las barras invertidas hacia atrás haciendo:

while read -r line 
    do 
    echo $line 
    done < "my.tex" 

la que debe modificar leer a no tratar de evaluar las barras invertidas. Sin embargo, probablemente aún se tragará los espacios principales.

Editar: establecer la variable especial $IFS a la cadena vacía, así:

export IFS= 

hará que los espacios que se conservan en este caso.

+2

Citando '$ line' también debería preservar los espacios. – chepner

+0

@chepner - eso es lo que pensé; sin duda, si había espacios en '$ line', eso es cierto, pero resultó que (en mi sistema) estaban siendo eliminados por' read', antes de ponerlos en '$ line'. –

+0

Gracias, el -r es lo que estaba buscando. – Barth

0

¿Se puede usar perl para una parte o la totalidad de los requisitos de secuencia de comandos?

perl -lne 'print;' my.tex 

Si tiene que tarde cáscara de salida a alguna otra herramienta, es posible que todavía tiene un problema, a menos que usted puede pasar los datos requeridos en un archivo.

Cuestiones relacionadas