Назад | Перейти на главную страницу

Как избежать двойных кавычек в содержимом, полученном из файла

Я пытаюсь избежать двойных кавычек при добавлении содержимого из statusfile.log кstatusfile_truncated.log.

Я огляделась и все больше запутываюсь. Как бы вы этого добились?

Вот что у меня получилось:

#!/bin/bash

statusfile="statusfile.log"
statusfile_truncated="statusfile_truncated.log"
tail -n 50 $statusfile >> $statusfile_truncated

Содержание 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.

Содержимое statusfile_truncated.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.

Я просто хочу вставить обратную косую черту перед двойной кавычкой, которую вы могли бы использовать sed как это:

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

Но если действительно происходит побег, нужно рассмотреть другие инструменты и методы.

Лучший способ заключить строку в кавычки bash использовать %b вариант в printf. Это обработает все специальные символы:

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