Comment puis-je échapper à des guillemets dans le contenu obtenu du file

J'essaie d'échapper à des guillemets doubles lors de l'ajout de contenu de statusfile.log à statusfile_truncated.log .

J'ai regardé autour de moi et je me fais plus confus. Comment l'atteindriez-vous?

C'est ce que j'ai obtenu jusqu'à présent:

 #!/bin/bash statusfile="statusfile.log" statusfile_truncated="statusfile_truncated.log" tail -n 50 $statusfile >> $statusfile_truncated 

Contenu de statusfile.log:

 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. "/xxxxxxxxxxxxx" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. "/xxxxxxxxxxxxx" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. "/xxxxxxxxxxxxx" is current directory. 

Le contenu de statusfile_truncated.log devrait être:

 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. \"/xxxxxxxxxxxxx\" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. \"/xxxxxxxxxxxxx\" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. \"/xxxxxxxxxxxxx\" is current directory. 

Je voudrais simplement insert une barre oblique inverse devant la double citation que vous pourriez faire avec comme ça:

 sed 's/"/\\"/g' $statusfile >> $statusfile_truncated 

Mais s'il y a un réel échappement, d'autres outils et techniques devraient être pris en considération.

La meilleure façon de citer une string dans bash consiste à utiliser l'option %b dans printf . Cela traitera tous les caractères spéciaux:

 $ variablename='foo "bar and C:\\foo\\bar' $ printf '%b\n' "$variablename" foo "bar and C:\foo\bar