LINUX.ORG.RU
ФорумAdmin

sed неправильно отрабатывает

 , , ,


1

1

Здравствуйте, уважаемые знатоки. Появился вопрос. У меня есть файлик с переменными. Мне надо экранировать кавычки и переменным добавить в начале и в конце кавычки.Файлик такого вида

["any@gmail.com","dpov@gmail.com"]
dev.cloud.com
7c6908c6-efceb9a5-52a23733dcb1

["GET", "POST", "PUT", "DELETE", "OPTIONS"]

["*"]
localhost
postgres://cha:0bcTqii6@localhost:5432/cha
YvcMg2GWXafS9lHaQ9txbvSHZNHDDR
2592000
SOv2cT29VqxrALGzTYflAR2wXJaiSQ1
amqp://cha:6pa4NMako@127.0.0.1:5672/cha

Я применяю

sed -e 's/\"/\\\"/g' -e 's/^/\"/g' -e 's/.$/\"/'  file.txt

и он делает всё как надо. Кроме одного. Если

["any@gmail.com","dpov@gmail.com"]

стоит в самом начале, то на выходе получается

"[\"any@gmail.com\",\"dpov@gmail.com\""

А если где-то в другом месте, то выходит всё нормально

"[\"any@gmail.com\",\"dpov@gmail.com\"]"

Подскажите, это вообще решаемо или уже могу начинать писать костыли?) Не первый раз работаю с sed, но это первый раз встречаю. Всем заранее спасибо.



Последнее исправление: xaizek (всего исправлений: 2)

А если где-то в другом месте, то выходит всё нормально

Нет, удаление последнего символа строки распространяется на каждую строку:

echo -e '["any@gmail.com","dpov@gmail.com"]\n["any@gmail.com","dpov@gmail.com"]\n["any@gmail.com","dpov@gmail.com"]' | sed -e 's/"/\"/g' -e 's/^/"/g' -e 's/.$/"/'

"["any@gmail.com","dpov@gmail.com""
"["any@gmail.com","dpov@gmail.com""
"["any@gmail.com","dpov@gmail.com""

Это делает команда:

's/.$/"/'

Ознакомьтесь с https://www.linux.org.ru/help/lorcode.md

ValdikSS ★★★★★
()
Ответ на: комментарий от xaizek

Теперь всё отрабатывает с первой строкой, а у остальных в начале есть кавычки, а в конце нет.

«["any@gmail.com","dpov@gmail.com"]»

"dev.cloud.com

Rivee
() автор топика
Ответ на: комментарий от ValdikSS

Да я знаю, что это делает крайняя команда. Вопрос как это исправить, потому что, если я её меняю, то у меня только первая строка добавляет в конец кавычки, а у остальных только в самом начале стоят и всё) Спасибо, ознакомлюсь с лоркодом

Rivee
() автор топика
Ответ на: комментарий от Rivee

Проблема в чём-то другом:

$ echo -e '["any@gmail.com","dpov@gmail.com"]\ndev.cloud.com\n7c6908c6-efceb9a5-52a23733dcb1' | sed -e 's/\"/\\\"/g' -e 's/^/\"/g' -e 's/\(.\)$/\1"/'
"[\"any@gmail.com\",\"dpov@gmail.com\"]"
"dev.cloud.com"
"7c6908c6-efceb9a5-52a23733dcb1"
xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.