- sed теряет кавычки и не хочет работать, Аноним, 11:17 , 30-Дек-20 (1)
Я перебрал наверное все известные мне варианты экранирования кавычек (и нашёл в поисковой системе некоторые странные). Ничего не получается.
- sed теряет кавычки и не хочет работать, Аноним, 12:14 , 30-Дек-20 (2)
> Нас интересует value2 и им мы будем оперировать > А то всё в кашу превращается.чего получиться-то должно? Или мы по каше должны догадаться? предположу, что где-то должно быть \([^"]*\)
- sed теряет кавычки и не хочет работать, Аноним, 12:27 , 30-Дек-20 (3)
Никакой каши. Должна получится исходная строка (.* включает все символы) и только совпадение имени с разрешённым расширением теряет кавычки и передаётся отдельно, скрипт потом возвращает искомое закавыченное значение и все остальные данные (.*), однако эти данные при этом теряют все кавычки ещё на этапе исполнения шелла в sed и не попадают в скрипт.
- sed теряет кавычки и не хочет работать, Аноним, 12:33 , 30-Дек-20 (4)
Теряется именно в процессе исполнения что можно пронаблюдать отключив его:echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/1:"\1" 2:"\2" 3:"\3" 4:"\4"/'
- sed теряет кавычки и не хочет работать, ACCA, 12:34 , 30-Дек-20 (5)
Господа студиозусы, вы слегка достали. Уже третий раз за месяц один и тот же вопрос.У тебя стандартная задача разобрать хэш { key=value }. Ну так и разбирай его с помощью правильного инструмента. Исходный поток [чем-нибудь] преобразуешь в правильный JSON, потом разбираешь JSON: echo '{ "value1"="111", "value2"="222.ext", "value3"="333" }' | tr = : | jq .value2 Надеюсь, ты догадаешься, как добавить недостающие запятые и кавычки, где нужно.
- sed теряет кавычки и не хочет работать, bagas, 12:38 , 30-Дек-20 (6)
> Господа студиозусы, вы слегка достали. Уже третий раз за месяц один и > тот же вопрос. > У тебя стандартная задача разобрать хэш { key=value }. Ну так и > разбирай его с помощью правильного инструмента. Исходный поток [чем-нибудь] преобразуешь > в правильный JSON, потом разбираешь JSON: > echo '{ "value1"="111", "value2"="222.ext", "value3"="333" }' | tr = : | jq > .value2 > Надеюсь, ты догадаешься, как добавить недостающие запятые и кавычки, где нужно.Не совсем понятно условие. А если так? echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed 's/value2\=\"[0-9]*\.[a-zA-Z]*\"//' Уберем из вывода value2="222.ext.
- sed теряет кавычки и не хочет работать, Аноним, 12:44 , 30-Дек-20 (8)
Нет, нужен sed. Необходимо вычленить все строки с файлами, проверить чтобы эти файлы были разрешёнными, потом передать все совпавшие строки в скрипт в котором проверяется существование файла на диске и его данные такие как новое имя (и расширение), и пометить некорректные данные. С этим справляются элементарное регулярное выражение и сед. "Умники" с tr несколько раздражают. Задача максимально чётко описана. Подскажите как решить проболему, или проходите мимо. Спасибо.
- sed теряет кавычки и не хочет работать, ACCA, 12:54 , 30-Дек-20 (9)
Ну, некоторые мышки плакали, кололись, но продолжали жрать кактус. Похвальная целеустремлённость. Эту бы энергию, да в мирных целях.Я ещё раз повторю основной тезис - новый велосипед с квадратными колёсами возможен. Но не нужен. Слегка преобразуй входной поток и будет тебе счастье. Ты хочешь заняться онанизмом вприсядку с помощью sed или решить конкретную задачу?
- sed теряет кавычки и не хочет работать, Аноним, 12:59 , 30-Дек-20 (10)
Да ну какой входной поток? На входе файлы со скриптами, там любые данные в строках и их не нужно изменять как-либо. А вот данные (и файлы) к которым скрипты обращаются, можно и нужно обработать, найти потерянные на диске данные и пометить вовсе отсутствующие.
- sed теряет кавычки и не хочет работать, ACCA, 13:17 , 30-Дек-20 (11)
Не путай тёплое с мягким.На входе не файлы, а имена файлов. И это поток, в котором не любые данные, а форматированные строки. Оформи их, как правильные строки в терминах JSON, это не настолько сложно. Хватит тупить, перечитай всё с самого начала и проговори вслух, что именно ты делаешь.
- sed теряет кавычки и не хочет работать, Аноним, 13:24 , 30-Дек-20 (12)
Форматирование там совершенно случайное и оно меня никак не интересует, это забота препроцессоров и компиляторов его потом разбирать. Меня интересуют только та часть, где происходит обращение к данным. Я могу эту часть проанализировать таким же однострочником и произвести замены в совпавших строках при необходимости. Просто признай неправоту и уходи, не надо хамить.
- sed теряет кавычки и не хочет работать, bagas, 15:29 , 30-Дек-20 (13)
> Здравствуйте, подскажите, спасибо. GNU sed только -- остальные исполнение не поддерживают, > по-моему. Типичное применение это скормить совпадения date. > echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/echo > 1:"\1" 2:"\2" 3:"\3" 4:"\4"/e' > Нас интересует value2 и им мы будем оперировать, необходимо чтобы остальные сроки > были переданы в скрипт без подобных модификаций навроде исчезающего содержимого. А > то всё в кашу превращается.Вам данные (value2="") с содержимым в двойных кавычках нужно убрать, остальное оставить?
- sed теряет кавычки и не хочет работать, Аноним, 15:46 , 30-Дек-20 (14)
Данные (222.ext) нужно извлечь и обработать, но я так понимаю в sed нет условных операторов и поэтому используется шелл-однострочник, в который эта строка 222.ext и передаётся. Все остальные элементы строки должны оставаться без изменения. Дополнительным препятствием является то, что там будет разнообразные спецсимволы, которые совершенно нельзя трогать.В текущем виде мы получаем строку до совпадения, имя файла (222), расширение (ext, но в оригинале там более интересная конструкция), и всё после совпадения, после чего скрипт возвращает нам корректную строку собранную обратно на основании этих 4 элементов. Содержимое до и после 222.ext вообще не интересно и должно остаться исходным. может быть что-то по типу echo -n "\1\""; /script.sh \2 \3; echo -n "\"\4"/e также даст нужный результат, но я просто возвращаю готовую строку. Проблема заключается в том, что /e съедает все кавычки из строки.
- sed теряет кавычки и не хочет работать, bagas, 15:53 , 30-Дек-20 (15)
>[оверквотинг удален] > Дополнительным препятствием является то, что там будет разнообразные спецсимволы, которые > совершенно нельзя трогать. > В текущем виде мы получаем строку до совпадения, имя файла (222), расширение > (ext, но в оригинале там более интересная конструкция), и всё после > совпадения, после чего скрипт возвращает нам корректную строку собранную обратно на > основании этих 4 элементов. Содержимое до и после 222.ext вообще не > интересно и должно остаться исходным. может быть что-то по типу echo > -n "\1\""; /script.sh \2 \3; echo -n "\"\4"/e также даст нужный > результат, но я просто возвращаю готовую строку. > Проблема заключается в том, что /e съедает все кавычки из строки.Все равно не понял. Что значит извлечь и обработать в вашем понимании? Вам просто нужно спарсить значение в ковычках у значения value2?
- sed теряет кавычки и не хочет работать, Аноним, 16:09 , 30-Дек-20 (16)
Получить из строки и заменить на другое (при необходимости). Задача модифицировать данные или оставить их в исходном виде уже решена отдельно, нам нужно только для каждой совпавшей строки передать 2 значения (текстовую ссылку на файл и совпавшее расширение файла) из неё в скрипт, после чего заменить всю строку на вывод скрипта.Для всего этого используется модификатор e, но, как можно видеть из примера, кавычки исчезают в процессе, а значит скрипту уже с самого начала не с чем работать. Он, кстати, прекрасно справляется, и целиком меня удовлетворяет, и поскольку кавычки в имени файла вещь достаточно необычная (не уверен даже, что все ОС поддерживают такие имена), то в этой части проблем никаких не было. Однако, кавычки исчезают из всех аргументов передаваемых в шелле.
- sed теряет кавычки и не хочет работать, bagas, 18:04 , 30-Дек-20 (17)
>[оверквотинг удален] > только для каждой совпавшей строки передать 2 значения (текстовую ссылку на > файл и совпавшее расширение файла) из неё в скрипт, после чего > заменить всю строку на вывод скрипта. > Для всего этого используется модификатор e, но, как можно видеть из примера, > кавычки исчезают в процессе, а значит скрипту уже с самого начала > не с чем работать. Он, кстати, прекрасно справляется, и целиком меня > удовлетворяет, и поскольку кавычки в имени файла вещь достаточно необычная (не > уверен даже, что все ОС поддерживают такие имена), то в этой > части проблем никаких не было. Однако, кавычки исчезают из всех аргументов > передаваемых в шелле.Напиши что есть и что должно получиться в итоге.
- sed теряет кавычки и не хочет работать, Аноним, 18:17 , 30-Дек-20 (18)
Я уже несколько раз написал. Есть это: $ echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/echo \1"\2\3"\4/e' value1=111 value2=222.ext value3=333 otherdata
в результате исполнения этого кода должно быть как тут: $ echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/\1"\2\3"\4/' value1="111" value2="222.ext" value3="333" otherdata
Тогда полученные данные можно будет передать в скрипт (который исполняется для каждой строки с совпадением).
- sed теряет кавычки и не хочет работать, Аноним, 20:29 , 30-Дек-20 (19)
Пока переписал на выборку из файла всех путей этой регуляркой (референсы 2 и 3) и потом в цикле для каждой строки с путём inplace sed исправляет невалидные значения в этом файле. Теперь вместо gnu sed зависимость gnu bash, и эффективность пострадала -- файлы перечитываются миллионы раз. Почему я никак не могу экранировать ссылки в sed? Никогда меня ещё так не раздражали тупые вопросы в гугле: в выдаче что угодно, только не эта проблема. Уже не представляю, как сформулировать запрос, что бы хоть что-нибудь нашлось.
- sed теряет кавычки и не хочет работать, Аноним, 10:08 , 31-Дек-20 (20) –1
> Я уже несколько раз написал. Есть это: > $ echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/echo > \1"\2\3"\4/e' > value1=111 value2=222.ext value3=333 otherdata > в результате исполнения этого кода должно быть как тут: > $ echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/\1"\2\3"\4/' > value1="111" value2="222.ext" value3="333" otherdata > Тогда полученные данные можно будет передать в скрипт (который исполняется для каждой > строки с совпадением).echo 'vlaue1="111" value2="222.ext" value3="333" otherdata'|sed -n 's/\(.*\)\ \(.*\)\ \(.*\)\ \(.*\)/1:\1 2:\2 3:\3 4:\4/p' 1:vlaue1="111" 2:value2="222.ext" 3:value3="333" 4:otherdata
ЗЫ. Излагаете отвратно - хрен поймешь, что действительно нужно получить в результате. С наступающим.
- sed теряет кавычки и не хочет работать, Аноним, 10:40 , 31-Дек-20 (21)
Да, спасибо (нет). Пробелов там не будет, там будут всякие call(123, "arg", 0.1, "path/file.ext") и path="path/file.ext" в _произвольной_ части строки. Но, можно зацепиться за то, что упоминания файлов можно как-то идентифицировать, что я и сделал.Нужно именно то, что написано в ОП, а именно: исполнить команду шелла и подставить в неё ссылки. И, поскольку выцепить все данные регуляркой и заменить конкретно их я и так смог (вполне ожидаемо), теперь я хочу только сделать лучше и избавиться от нездорового оверхэда исправив решение, которое изначально проще и лучше. И всё как бы работает, да только "sed теряет кавычки и не хочет работать". Я даже примеры кода привёл, хватит тратить моё время в таком случае.
- sed теряет кавычки и не хочет работать, Аноним, 11:04 , 31-Дек-20 (22)
>[оверквотинг удален] > 0.1, "path/file.ext") и path="path/file.ext" в _произвольной_ части строки. Но, можно > зацепиться за то, что упоминания файлов можно как-то идентифицировать, что я > и сделал. > Нужно именно то, что написано в ОП, а именно: исполнить команду шелла > и подставить в неё ссылки. И, поскольку выцепить все данные регуляркой > и заменить конкретно их я и так смог (вполне ожидаемо), теперь > я хочу только сделать лучше и избавиться от нездорового оверхэда исправив > решение, которое изначально проще и лучше. И всё как бы работает, > да только "sed теряет кавычки и не хочет работать". > Я даже примеры кода привёл, хватит тратить моё время в таком случае. Религия запрещает использовать в качестве разделителя _не_пробел, а запятые?
\(.*\),
- sed теряет кавычки и не хочет работать, Аноним, 11:44 , 31-Дек-20 (23)
Там разное число элементов. Может быть вообще 1 на всю строку, а может быть и 2. И это не то, о чём был вопрос. В общем, это обсуждение в этом топике в очередной раз иллюстрирует уровень сегодняшнего рунета.
- sed теряет кавычки и не хочет работать, markus, 11:29 , 02-Янв-21 (25)
> Там разное число элементов. Может быть вообще 1 на всю строку, а > может быть и 2. И это не то, о чём был > вопрос. В общем, это обсуждение в этом топике в очередной раз > иллюстрирует уровень сегодняшнего рунета.))) Начни для начало с себя! Начни правильно излагать задачу!!!
- sed теряет кавычки и не хочет работать, Аноним, 13:29 , 02-Янв-21 (26)
Ну так я хочу, чтобы "исполнение команды" в sed не проглатывало кавычки. О чём и сообщил уже раз 15. Очевидно, что я не хочу tr и jq, которые мне ничем не помогут. Чем задача не правильная, разве она не была сформулирована вполне конкретно? Проблема тут только в "читателях".
- sed теряет кавычки и не хочет работать, markus, 11:27 , 02-Янв-21 (24)
>[оверквотинг удален] > 0.1, "path/file.ext") и path="path/file.ext" в _произвольной_ части строки. Но, можно > зацепиться за то, что упоминания файлов можно как-то идентифицировать, что я > и сделал. > Нужно именно то, что написано в ОП, а именно: исполнить команду шелла > и подставить в неё ссылки. И, поскольку выцепить все данные регуляркой > и заменить конкретно их я и так смог (вполне ожидаемо), теперь > я хочу только сделать лучше и избавиться от нездорового оверхэда исправив > решение, которое изначально проще и лучше. И всё как бы работает, > да только "sed теряет кавычки и не хочет работать". > Я даже примеры кода привёл, хватит тратить моё время в таком случае. Какие примеры коды? ))) Ты сам не понимаешь чего хочешь?! Жуть, и вот такие горе админы пробиваются в верхи и после пытаются управлять отделами! Жуть, просто жуть!
- sed теряет кавычки и не хочет работать, Аноним, 13:41 , 02-Янв-21 (27)
Если у вас проблемы с восприятием, это же не значит, что они есть у всех. Я привёл пример кода, достаточно иллюстрирующий суть проблемы.Начнём с того, что решить задачу другим путём, что мне предлагает каждый первый, в принципе невозможно. Да, можно написать скрипт который будет искать 2 кавычки на каждой строке, запоминать их позиции, и посимвольно проверять, чтобы на конце было подходящее расширение файла. После чего строить новую строку с новой ссылкой на файл. И то, это же всё равно сломается, если у нас многострочная строка. К частью, такое мне ещё не встречалось. Или же можно использовать примитивную регулярочку, которая сделает всё желаемое с минимум затрат. Собственно, именно это я и сделал, оставив выражение матчинга без изменений. Только теперь я получаю список файлов и заменяю каждое совпадение, вместо того чтобы sed сразу совершил все необходимые замены.
- sed теряет кавычки и не хочет работать, Аноним, 13:51 , 02-Янв-21 (28)
Ещё можно использовать bison и компанию. Да, можно сделать хорошо, даже лучше, более узкоспециализированно. Но зачем, если ссылка "никогда" не будет разбита на несколько строк? Это в принципе достаточно невероятная ситуация, на практике повстречать такой код не придётся действительно никогда. Sed более чем достаточно.
- sed теряет кавычки и не хочет работать, Аноним, 18:34 , 03-Янв-21 (29)
Не уверен что правильно понял задачу, но возможно это как-то поможет:$ echo -e 'value1="111" value2="222.ext" value3="333" otherdata\nvalue1="1" value2="2" value3="3" otherdata' | sed -e 's/"/\\"/g;s/\(.*\)\\"\(.*\)\(\.ext\)\\"\(.*\)/echo \1\\"\2\3\\"\4/e;s/\\"/\"/g' value1="111" value2="222.ext" value3="333" otherdata value1="1" value2="2" value3="3" otherdata
- sed теряет кавычки и не хочет работать, Аноним, 18:51 , 03-Янв-21 (30)
Как вариант. Ещё использую со страницами, там кавычки вообще заменены на " и можно так с ними и работать или же перегонять в другие кавычки. Вопрос "проглатывания" принципиально не решаемый? Неужели они не подумали о том, что ссылки как-то нужно защищать от подобного?
- sed теряет кавычки и не хочет работать, Аноним, 18:52 , 03-Янв-21 (31)
Заменены на & quot; //fix
- sed теряет кавычки и не хочет работать, Аноним, 20:27 , 03-Янв-21 (32)
Двойные кавычки съедает echo, а не sed. Чтобы он этого не делал, нужно передать ему строку, заключённую в одинарные кавычки. Но поскольку всё это уже находится в одинарных кавычках, то, чтобы шелл правильно всё распарсил, нужна такая последовательность (один из вариантов): '"'"'Т.е. первый апостроф заканчивает строку; затем идёт строка в двойных кавычках, которая и передаёт нужный нам апостроф; и последний апостроф снова начинает (продолжает) строку в одинарных кавычках. $ echo -e 'value1="111" value2="222.ext" value3="333" otherdata\nvalue1="1" value2="2" value3="3" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/echo '"'"'\1\"\2\3\"\4'"'"'/e' value1="111" value2="222.ext" value3="333" otherdata value1="1" value2="2" value3="3" otherdata
|