Question Bash: Caractères spéciaux perdus lors de la lecture du fichier


J'ai un fichier contenant du latex:

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

Je veux le lire dans un script bash:

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

La sortie est

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

Pourquoi ai-je perdu les barres obliques et les espaces initiaux?

Comment les préserver?


15
2017-07-19 16:00


origine


Réponses:


Vous avez perdu les barres obliques inverses et les espaces car bash (via sa lecture intégrée) évalue la valeur du texte - en remplaçant les variables, en recherchant les caractères d'échappement (tabulation, nouvelle ligne), etc. la page de manuel pour quelques détails. De plus, l'écho combinera les espaces blancs.

En ce qui concerne leur préservation, je ne suis pas sûr que ce soit possible. Vous obtiendrez probablement les antislashs en faisant:

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

qui devrait modifier lire pour ne pas essayer d'évaluer les barres obliques inverses. Il va probablement encore avaler les principaux espaces, cependant.

Modifier: définir le $IFS variable spéciale à la chaîne vide, comme ceci:

export IFS=

fera les espaces à préserver dans ce cas.


19
2017-07-19 16:12



Peux tu utiliser perl pour tout ou partie de vos exigences de script?

perl -lne 'print;' my.tex

Si, par la suite, vous devez utiliser un autre outil, vous pouvez toujours avoir un problème, à moins que vous ne puissiez transmettre les données requises dans un fichier.


0
2017-07-19 16:19