Я пытаюсь избежать двойных кавычек при добавлении содержимого из 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