LINUX.ORG.RU

SED изменения внутри строки до первой запятой

 , ,


0

4

в общем интересен момент, когда надо изменить внутри строки от паттерна до паттерна как сделать?

от паттерна до последней запятой у меня получилось:

sed 's/pattern.*,/замена/'


но как быть если надо заменить в строке до первой запятой, когда их несколько?

★★

но как быть если надо заменить в строке до первой запятой, когда их несколько?

Очевидно, заменять не любой символ (.), а незапятую ([^,]).

sed

Только уверены ли вы вообще, что вы решаете задачу разумным образом и выбрав уместные средства?

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от Zmicier

ну вот надо было исправить много названий в большом файле, которые были в центре строки, но заключенные в запятые (как пример), автоматически не зная всей строки.

как еще енто сделать я хз

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

Нет, переписав решение задачи с Седа на русский, вы задачу не сформулируете.

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

ты наверна не понял.

смотри:

"( ап ап, му му пук пук, вах вах, бит бит )" — тут в строке мы знаем только чо есть му, и надо заменить «му му пук пук» на «му му джи джи», т.е. от «му» до запятой после «пук».

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

ну так я же написал чо знаем только «му»... а у тебя тут заменяется «му му пук пук» хотя мы «му пук пук» не знаем.

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

получается если мы знаем только «му», то он только его и заменяет, а надо все до первой запятой начиная с му

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

Как-то так? :) (Для sed это явно перебор.)

echo "( ап ап, му му пук пук, вах вах, бит бит )" |
sed -r '/му[^,]*,/{
    s/(му[^,]*,)/\n\1\n/;
    h;
    s/.*\n(.*)\n.*/\1/;
    s/пук/джи/g;         # тут заменяется часть строки, ограниченная паттернами (они в строке сохранены, кстати)
    H;
    x;
    s/(.*)\n.*\n(.*)\n(.*)/\1\3\2/
}'
Вывод:
( ап ап, му му джи джи, вах вах, бит бит )

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

надо енто https://pastebin.com/raw/TAcFq9G6 заменить на енто https://pastebin.com/raw/bzMFvh25

нужно енто все для того чо бы не было много групп плагинов по создателю, а была только одна группа Calf Studio Gear

т.е. надо по сути удалить после «Calf Studio Gear» все до первой запятой.

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 2)
Ответ на: комментарий от xaizek

нет не верно, ты соло «пук» не знаешь, и даже вторую «му» не знаешь, они в каждой строке могут быть разными

кстати мне повезло, чо после запятой в моем случае одна и таже фраза везде, по ентому немного упрощается, но если ента фраза не будет одинаковой везде?

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.