Grep, чтобы найти шаблон и заменить в той же строке - PullRequest
0 голосов
/ 30 октября 2018

У меня есть каталог проекта с папками, содержащими файлы .html. Я хочу найти те файлы, которые имеют шаблон -

'btn-primary.*{.*Save'

и заменить

'btn-primary' word with 'btn-primary Save' 

только в этих строках.

Что я сделал:

grep -rl -e 'btn-primary.*{Save' . |xargs sed -i 's/btn-primary/btn-primary Save/g'

Что это сделало:

Здесь найдены все файлы с таким шаблоном, ничего страшного. Затем sed запустил все эти файлы и заменил «btn-primary» на «btn-primary save», где бы он ни находился - а это не то, что мне нужно

Что я хочу: заменить в тех строках, где где-то после «btn-primary» есть «Сохранить».

Буду очень признателен за любую помощь.

С уважением, Рахул

1 Ответ

0 голосов
/ 30 октября 2018

Почему вы вообще используете grep? Sed делает сопоставление с образцом:

sed -e 's/btn-primary\(.*{.*Save\)/btn-primary Save\1/g'

или:

sed -e 's/\(btn-primary\)\(.*{.*Save\)/\1 Save\2/g'

Если вы используете grep, чтобы попытаться сократить количество файлов, над которыми будет работать sed, вы обманываете себя, если считаете, что это более эффективно. Делая это, вы будете читать каждый файл, который не соответствует только один раз, но каждый файл, который соответствует, будет прочитан дважды. Если вы используете только sed, каждый файл будет прочитан только один раз.

...