![]() |
Пред. тема | След. тема | ||
Форум Программирование под UNIX (Shell скрипты) | |||
---|---|---|---|
Изначальное сообщение | [ Отслеживать ] |
"sed теряет кавычки и не хочет работать" | +/– | ![]() |
Сообщение от Аноним (0), 30-Дек-20, 10:37 | ||
Здравствуйте, подскажите, спасибо. GNU sed только -- остальные исполнение не поддерживают, по-моему. Типичное применение это скормить совпадения date. | ||
Ответить | Правка | Cообщить модератору |
Оглавление |
Сообщения | [Сортировка по ответам | RSS] |
1. Сообщение от Аноним (0), 30-Дек-20, 11:17 | +/– | ![]() |
Я перебрал наверное все известные мне варианты экранирования кавычек (и нашёл в поисковой системе некоторые странные). Ничего не получается. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
2. Сообщение от Аноним (2), 30-Дек-20, 12:14 | +/– | ![]() |
> Нас интересует value2 и им мы будем оперировать | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #3, #4 |
3. Сообщение от Аноним (0), 30-Дек-20, 12:27 | +/– | ![]() |
Никакой каши. Должна получится исходная строка (.* включает все символы) и только совпадение имени с разрешённым расширением теряет кавычки и передаётся отдельно, скрипт потом возвращает искомое закавыченное значение и все остальные данные (.*), однако эти данные при этом теряют все кавычки ещё на этапе исполнения шелла в sed и не попадают в скрипт. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #2 |
4. Сообщение от Аноним (0), 30-Дек-20, 12:33 | +/– | ![]() |
Теряется именно в процессе исполнения что можно пронаблюдать отключив его: | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #2 |
5. Сообщение от ACCA (ok), 30-Дек-20, 12:34 | +/– | ![]() |
Господа студиозусы, вы слегка достали. Уже третий раз за месяц один и тот же вопрос. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #6, #8 |
6. Сообщение от bagas (ok), 30-Дек-20, 12:38 | +/– | ![]() |
> Господа студиозусы, вы слегка достали. Уже третий раз за месяц один и | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #5 Ответы: #7 |
7. Сообщение от ACCA (ok), 30-Дек-20, 12:43 | +/– | ![]() |
Вот так и поговорили. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #6 |
8. Сообщение от Аноним (0), 30-Дек-20, 12:44 | +/– | ![]() |
Нет, нужен sed. Необходимо вычленить все строки с файлами, проверить чтобы эти файлы были разрешёнными, потом передать все совпавшие строки в скрипт в котором проверяется существование файла на диске и его данные такие как новое имя (и расширение), и пометить некорректные данные. С этим справляются элементарное регулярное выражение и сед. "Умники" с tr несколько раздражают. Задача максимально чётко описана. Подскажите как решить проболему, или проходите мимо. Спасибо. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #5 Ответы: #9 |
9. Сообщение от ACCA (ok), 30-Дек-20, 12:54 | +/– | ![]() |
Ну, некоторые мышки плакали, кололись, но продолжали жрать кактус. Похвальная целеустремлённость. Эту бы энергию, да в мирных целях. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #8 Ответы: #10 |
10. Сообщение от Аноним (0), 30-Дек-20, 12:59 | +/– | ![]() |
Да ну какой входной поток? На входе файлы со скриптами, там любые данные в строках и их не нужно изменять как-либо. А вот данные (и файлы) к которым скрипты обращаются, можно и нужно обработать, найти потерянные на диске данные и пометить вовсе отсутствующие. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #9 Ответы: #11 |
11. Сообщение от ACCA (ok), 30-Дек-20, 13:17 | +/– | ![]() |
Не путай тёплое с мягким. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #10 Ответы: #12 |
12. Сообщение от Аноним (0), 30-Дек-20, 13:24 | +/– | ![]() |
Форматирование там совершенно случайное и оно меня никак не интересует, это забота препроцессоров и компиляторов его потом разбирать. Меня интересуют только та часть, где происходит обращение к данным. Я могу эту часть проанализировать таким же однострочником и произвести замены в совпавших строках при необходимости. Просто признай неправоту и уходи, не надо хамить. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #11 |
13. Сообщение от bagas (ok), 30-Дек-20, 15:29 | +/– | ![]() |
> Здравствуйте, подскажите, спасибо. GNU sed только -- остальные исполнение не поддерживают, | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #14 |
14. Сообщение от Аноним (0), 30-Дек-20, 15:46 | +/– | ![]() |
Данные (222.ext) нужно извлечь и обработать, но я так понимаю в sed нет условных операторов и поэтому используется шелл-однострочник, в который эта строка 222.ext и передаётся. Все остальные элементы строки должны оставаться без изменения. Дополнительным препятствием является то, что там будет разнообразные спецсимволы, которые совершенно нельзя трогать. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #13 Ответы: #15 |
15. Сообщение от bagas (ok), 30-Дек-20, 15:53 | +/– | ![]() |
>[оверквотинг удален] | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #14 Ответы: #16 |
16. Сообщение от Аноним (0), 30-Дек-20, 16:09 | +/– | ![]() |
Получить из строки и заменить на другое (при необходимости). Задача модифицировать данные или оставить их в исходном виде уже решена отдельно, нам нужно только для каждой совпавшей строки передать 2 значения (текстовую ссылку на файл и совпавшее расширение файла) из неё в скрипт, после чего заменить всю строку на вывод скрипта. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #15 Ответы: #17 |
17. Сообщение от bagas (ok), 30-Дек-20, 18:04 | +/– | ![]() |
>[оверквотинг удален] | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #16 Ответы: #18 |
18. Сообщение от Аноним (0), 30-Дек-20, 18:17 | +/– | ![]() |
Я уже несколько раз написал. Есть это: | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #17 Ответы: #19, #20 |
19. Сообщение от Аноним (0), 30-Дек-20, 20:29 | +/– | ![]() |
Пока переписал на выборку из файла всех путей этой регуляркой (референсы 2 и 3) и потом в цикле для каждой строки с путём inplace sed исправляет невалидные значения в этом файле. Теперь вместо gnu sed зависимость gnu bash, и эффективность пострадала -- файлы перечитываются миллионы раз. Почему я никак не могу экранировать ссылки в sed? Никогда меня ещё так не раздражали тупые вопросы в гугле: в выдаче что угодно, только не эта проблема. Уже не представляю, как сформулировать запрос, что бы хоть что-нибудь нашлось. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #18 |
20. Сообщение от Аноним (20), 31-Дек-20, 10:08 | –1 +/– | ![]() |
> Я уже несколько раз написал. Есть это: | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #18 Ответы: #21 |
21. Сообщение от Аноним (0), 31-Дек-20, 10:40 | +/– | ![]() |
Да, спасибо (нет). Пробелов там не будет, там будут всякие call(123, "arg", 0.1, "path/file.ext") и path="path/file.ext" в _произвольной_ части строки. Но, можно зацепиться за то, что упоминания файлов можно как-то идентифицировать, что я и сделал. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #20 Ответы: #22, #24 |
22. Сообщение от Аноним (20), 31-Дек-20, 11:04 | +/– | ![]() |
>[оверквотинг удален] | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #21 Ответы: #23 |
23. Сообщение от Аноним (0), 31-Дек-20, 11:44 | +/– | ![]() |
Там разное число элементов. Может быть вообще 1 на всю строку, а может быть и 2. И это не то, о чём был вопрос. В общем, это обсуждение в этом топике в очередной раз иллюстрирует уровень сегодняшнего рунета. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #22 Ответы: #25 |
24. Сообщение от markus (?), 02-Янв-21, 11:27 | +/– | ![]() |
>[оверквотинг удален] | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #21 Ответы: #27 |
25. Сообщение от markus (?), 02-Янв-21, 11:29 | +/– | ![]() |
> Там разное число элементов. Может быть вообще 1 на всю строку, а | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #23 Ответы: #26 |
26. Сообщение от Аноним (0), 02-Янв-21, 13:29 | +/– | ![]() |
Ну так я хочу, чтобы "исполнение команды" в sed не проглатывало кавычки. О чём и сообщил уже раз 15. Очевидно, что я не хочу tr и jq, которые мне ничем не помогут. Чем задача не правильная, разве она не была сформулирована вполне конкретно? Проблема тут только в "читателях". | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #25 |
27. Сообщение от Аноним (0), 02-Янв-21, 13:41 | +/– | ![]() |
Если у вас проблемы с восприятием, это же не значит, что они есть у всех. Я привёл пример кода, достаточно иллюстрирующий суть проблемы. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #24 Ответы: #28 |
28. Сообщение от Аноним (0), 02-Янв-21, 13:51 | +/– | ![]() |
Ещё можно использовать bison и компанию. Да, можно сделать хорошо, даже лучше, более узкоспециализированно. Но зачем, если ссылка "никогда" не будет разбита на несколько строк? Это в принципе достаточно невероятная ситуация, на практике повстречать такой код не придётся действительно никогда. Sed более чем достаточно. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #27 |
29. Сообщение от Аноним (29), 03-Янв-21, 18:34 | +/– | ![]() |
Не уверен что правильно понял задачу, но возможно это как-то поможет: | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #30 |
30. Сообщение от Аноним (0), 03-Янв-21, 18:51 | +/– | ![]() |
Как вариант. Ещё использую со страницами, там кавычки вообще заменены на " и можно так с ними и работать или же перегонять в другие кавычки. Вопрос "проглатывания" принципиально не решаемый? Неужели они не подумали о том, что ссылки как-то нужно защищать от подобного? | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #29 Ответы: #31, #32 |
31. Сообщение от Аноним (0), 03-Янв-21, 18:52 | +/– | ![]() |
Заменены на & quot; //fix | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #30 |
32. Сообщение от Аноним (29), 03-Янв-21, 20:27 | +/– | ![]() |
Двойные кавычки съедает echo, а не sed. Чтобы он этого не делал, нужно передать ему строку, заключённую в одинарные кавычки. Но поскольку всё это уже находится в одинарных кавычках, то, чтобы шелл правильно всё распарсил, нужна такая последовательность (один из вариантов): '"'"' | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #30 |
Архив | Удалить |
Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема |
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |