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