sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправить?

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
жучара
Сообщения: 783
ОС: астралинукс

sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправить?

Сообщение жучара »

Друзья!
По значениям переменных в sed прочёл здесь
Вот пусть sed найдёт строку в файле и удалит её. Вот строка (со слэшем. обращаю внимание):

Shell

$ MYSTR="p/r"
А вот пустой файл, лишь бы был:

Shell

$ > test
А теперь удалим эту строку из файла $MYSTR

Shell

$ sed "/^${MYSTR}$/d" test
$
Вывод предсказуем, файл-то пустой. А теперь заменим в переменной всего одну букву (r на d и повторим код):

Shell

$ MYSTR="p/d"
$ > test
$ sed "/^${MYSTR}$/d" test
sed: -e выражение #1, символ 6: лишние символы после команды
$
Я могу только предполагать, почему так. Наверное, MYSTR меняется на p/d, sed видит /d, а потом видит второй /d и происходит коллапс. И как этого избежать, я не знаю. Прямой слэш в значении переменной НЕОБХОДИМ. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Zer0
Сообщения: 383
ОС: Void, Slackware

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение Zer0 »

Возможно экранированием спецсимволов с помощью \ перед слэшем.
Добавлено: \ перед каждым слэшем.
Последний раз редактировалось Zer0 04.12.2021 19:51, всего редактировалось 1 раз.
Memento mori ... сделай бэкап.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 783
ОС: астралинукс

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение жучара »

Zer0 писал:
04.12.2021 19:34
Возможно экранированием спецсимволов с помощью \ перед слэшем.
Получилось. Да нежелательно, понимаете. У меня скрипт планируется и там такие переменные- суть имена папок, от запуска к запуску скрипта разные, естессно. Ненаэкранируешься. Хотя, может быть и придётся. Ещу послушаем других ребят.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Zer0
Сообщения: 383
ОС: Void, Slackware

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение Zer0 »

жучара, экранировать можно не только обратным слэшем, может быть другие варианты экранирования лучше подойдут для Вашей задачи. Ну и предложения от форумчан, тоже конечно будут в тему.
Memento mori ... сделай бэкап.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение bars »

У меня нормально без ошибок.
Но только я не понимаю что вы пытаетесь сделать, удалить строку с содержимым MYSTR="p/d" ?
Linux/bash

Код: Выделить всё

$ sed '/^${MYSTR}$/d' tmp/ttt
fdg
MYSTR="p/d"
sfdg
bars@serv1 ~ $ cat tmp/ttt 
fdg
MYSTR="p/d"
sfdg
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 783
ОС: астралинукс

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение жучара »

bars писал:
04.12.2021 19:56
У меня нормально без ошибок.
а можно код посмотреть? Ну, который без ошибок.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение bars »

жучара писал(а):
04.12.2021 20:02
а можно код посмотреть? Ну, который без ошибок.
Так я его предоставил же.
Что выходите сделать?
Добавлено (20:17):
А понял, вы создаете временную переменную в оболочке и хотите в файл выдать содержимое этой переменной.
Только экранировать \ по другому ни как.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 783
ОС: астралинукс

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение жучара »

bars писал:
04.12.2021 20:04
жучара писал(а):
04.12.2021 20:02
а можно код посмотреть? Ну, который без ошибок.
Так я его предоставил же.
так у вас код начинается с sed '/^${MYSTR}$/d' tmp/ttt, это так должно быть?
bars писал:
04.12.2021 20:04
Что выходите сделать?
чтобы удалялось без проблем таких вот:
sed: -e выражение #1, символ 6: лишние символы после команды
...это, кстати, в первом сообщении есть.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение bars »

жучара писал(а):
04.12.2021 20:20
так у вас код начинается с sed '/^${MYSTR}$/d' tmp/ttt, это так должно быть?
Не понял, что вы имеете ввиду?
По порядку.
$ MYSTR="p/d" - что вы делаете этим
$ > test И тут что вы делаете?
Добавлено (20:41):
Хмм, вот так.

Код: Выделить всё

bars@serv1 ~ $ cat tmp/ttt
47dd
aaa47
MYSTR="p/d"
12
bars@serv1 ~ $ sed "/^MYSTR/d" tmp/ttt
47dd
aaa47
12
$ echo $MYSTR
p/d
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19413
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: sed реагирует на слэши в именах переменных, будуто это не таковые, а слэши-части команды самого sed. Как это исправи

Сообщение Bizdelnick »

sed ничего не знает ни про какие переменные. Это переменные оболочки, оболочка их и раскрывает, формируя команду. sed получает уже готовую строку. Поэтому не стоит ждать, что какие бы то ни было символы внутри переменной он будет обрабатывать иначе, нежели если бы они были переданы напрямую.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: